From 7914608efef17dfebf931ef7e1afde10c4c7a0d4 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Tue, 6 Jul 2021 16:54:27 +0200 Subject: [PATCH] Add js-routes to use Route helpers in JavaScript --- Gemfile | 1 + Gemfile.lock | 3 +++ app/javascript/packs/application.js | 4 ++++ app/javascript/routes.js.erb | 1 + config/initializers/js_routes.rb | 7 +++++++ config/webpack/environment.js | 3 +++ config/webpack/loaders/erb.js | 16 ++++++++++++++++ package.json | 1 + yarn.lock | 13 +++++++++++++ 9 files changed, 49 insertions(+) create mode 100644 app/javascript/routes.js.erb create mode 100644 config/initializers/js_routes.rb create mode 100644 config/webpack/loaders/erb.js diff --git a/Gemfile b/Gemfile index 20e4498e..92afc60f 100644 --- a/Gemfile +++ b/Gemfile @@ -16,6 +16,7 @@ gem 'highline' gem 'i18n-js' gem 'ims-lti', '< 2.0.0' gem 'jbuilder' +gem 'js-routes' gem 'kramdown' gem 'mimemagic' gem 'nokogiri' diff --git a/Gemfile.lock b/Gemfile.lock index e529a8dd..aa3503a1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -216,6 +216,8 @@ GEM thor (>= 0.14, < 2.0) jquery-ui-rails (6.0.1) railties (>= 3.2.16) + js-routes (2.0.7) + railties (>= 4) json (2.3.1) jwt (2.2.3) kaminari (1.2.1) @@ -554,6 +556,7 @@ DEPENDENCIES i18n-js ims-lti (< 2.0.0) jbuilder + js-routes kramdown listen mimemagic diff --git a/app/javascript/packs/application.js b/app/javascript/packs/application.js index 8e0bd22d..cf59ed81 100644 --- a/app/javascript/packs/application.js +++ b/app/javascript/packs/application.js @@ -39,3 +39,7 @@ import 'jquery-ui/themes/base/core.css' import 'jquery-ui/themes/base/resizable.css' import 'jquery-ui/themes/base/selectable.css' import 'jquery-ui/themes/base/sortable.css' + +// Routes +import * as Routes from 'routes.js.erb'; +window.Routes = Routes; diff --git a/app/javascript/routes.js.erb b/app/javascript/routes.js.erb new file mode 100644 index 00000000..5965eb2a --- /dev/null +++ b/app/javascript/routes.js.erb @@ -0,0 +1 @@ +<%= JsRoutes.generate %> diff --git a/config/initializers/js_routes.rb b/config/initializers/js_routes.rb new file mode 100644 index 00000000..2bac2935 --- /dev/null +++ b/config/initializers/js_routes.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +JsRoutes.setup do |config| + config.documentation = false + config.prefix = Rails.application.config.relative_url_root + config.url_links = true +end diff --git a/config/webpack/environment.js b/config/webpack/environment.js index 54e50536..c690ddab 100644 --- a/config/webpack/environment.js +++ b/config/webpack/environment.js @@ -7,6 +7,7 @@ github.com/rails/webpacker/blob/master/docs/webpack.md const { environment } = require('@rails/webpacker') const { merge } = require('webpack-merge') const webpack = require('webpack') +const erb = require('./loaders/erb') // Add an additional plugin of your choosing : ProvidePlugin environment.plugins.prepend('Provide', new webpack.ProvidePlugin({ @@ -24,6 +25,8 @@ environment.plugins.prepend('Provide', new webpack.ProvidePlugin({ }) ) +environment.loaders.append('erb', erb) + const envConfig = module.exports = environment const aliasConfig = module.exports = { resolve: { diff --git a/config/webpack/loaders/erb.js b/config/webpack/loaders/erb.js new file mode 100644 index 00000000..8c69c6a2 --- /dev/null +++ b/config/webpack/loaders/erb.js @@ -0,0 +1,16 @@ +module.exports = { + test: /\.erb$/, + enforce: "pre", + exclude: /node_modules/, + + use: [{ + loader: "rails-erb-loader", + options: { + runner: (/^win/.test(process.platform) ? "ruby " : "") + "bin/rails runner", + env: { + ...process.env, + DISABLE_SPRING: 1, + }, + }, + }], +} diff --git a/package.json b/package.json index bde0a97d..cb3d971b 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "jstree": "^3.3.11", "opensans-webkit": "^1.1.0", "popper.js": "^1.16.1", + "rails-erb-loader": "^5.5.2", "sortablejs": "^1.14.0", "underscore": "^1.13.1", "vis": "^4.21.0", diff --git a/yarn.lock b/yarn.lock index 1fa7a7f8..5ff95dbd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4272,6 +4272,11 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + lodash.get@^4.0: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -5879,6 +5884,14 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +rails-erb-loader@^5.5.2: + version "5.5.2" + resolved "https://registry.yarnpkg.com/rails-erb-loader/-/rails-erb-loader-5.5.2.tgz#db3fa8ac89600f09d179a1a70a2ca18c592576ea" + integrity sha512-cjQH9SuSvRPhnWkvjmmAW/S4AFVDfAtYnQO4XpKJ8xpRdZayT73iXoE+IPc3VzN03noZXhVmyvsCvKvHj4LY6w== + dependencies: + loader-utils "^1.1.0" + lodash.defaults "^4.2.0" + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"