diff --git a/app/frontend/src/javascript/controllers/admin/invoices.js b/app/frontend/src/javascript/controllers/admin/invoices.js index cae4d2613..842476650 100644 --- a/app/frontend/src/javascript/controllers/admin/invoices.js +++ b/app/frontend/src/javascript/controllers/admin/invoices.js @@ -58,7 +58,7 @@ Application.Controllers.controller('InvoicesController', ['$scope', '$state', 'I prefix: settings.invoice_prefix, nextId: 40, date: moment().format('DDMMYYYY'), - templateUrl: 'editPrefix.html' + templateUrl: '../../../../templates/admin/invoices/settings/editPrefix.html' }; // Invoices parameters @@ -67,22 +67,22 @@ Application.Controllers.controller('InvoicesController', ['$scope', '$state', 'I reference: { model: '', help: null, - templateUrl: 'editReference.html' + templateUrl: '../../../../templates/admin/invoices/settings/editReference.html' }, code: { model: '', active: true, - templateUrl: 'editCode.html' + templateUrl: '../../../../templates/admin/invoices/settings/editCode.html' }, number: { model: '', help: null, - templateUrl: 'editNumber.html' + templateUrl: '../../../../templates/admin/invoices/settings/editNumber.html' }, VAT: { rate: 19.6, active: false, - templateUrl: 'editVAT.html' + templateUrl: '../../../../templates/admin/invoices/settings/editVAT.html' }, text: { content: '' @@ -646,7 +646,7 @@ Application.Controllers.controller('InvoicesController', ['$scope', '$state', 'I // otherwise, open a modal to ask for the stripe keys const modalInstance = $uibModal.open({ - templateUrl: 'stripeKeys.html', + templateUrl: '../../../../templates/admin/invoices/settings/stripeKeys.html', controller: 'StripeKeysModalController', resolve: { stripeKeys: ['Setting', function (Setting) { return Setting.query({ names: "['stripe_public_key', 'stripe_secret_key']" }).$promise; }] diff --git a/app/frontend/src/javascript/controllers/calendar.js b/app/frontend/src/javascript/controllers/calendar.js index 5aee10919..26cd7666c 100644 --- a/app/frontend/src/javascript/controllers/calendar.js +++ b/app/frontend/src/javascript/controllers/calendar.js @@ -106,7 +106,7 @@ Application.Controllers.controller('CalendarController', ['$scope', '$state', '$ $scope.openFilterAside = () => $aside.open({ - templateUrl: 'filterAside.html', + templateUrl: '../../../templates/calendar/filterAside.html', placement: 'right', size: 'md', backdrop: false, diff --git a/app/frontend/src/javascript/directives/settings/select-multiple-setting.js b/app/frontend/src/javascript/directives/settings/select-multiple-setting.js index 279cec9e9..743fba8a4 100644 --- a/app/frontend/src/javascript/directives/settings/select-multiple-setting.js +++ b/app/frontend/src/javascript/directives/settings/select-multiple-setting.js @@ -44,7 +44,7 @@ Application.Directives.directive('selectMultipleSetting', ['Setting', 'growl', ' */ $scope.addItem = function () { $uibModal.open({ - templateUrl: 'newSelectOption.html', + templateUrl: '../../../../templates/admin/settings/newSelectOption.html', resolve: { titleNew: function () { return $scope.titleNew; }, descriptionNew: function () { return $scope.descriptionNew; } diff --git a/app/frontend/src/javascript/lib/devise-modal.js b/app/frontend/src/javascript/lib/devise-modal.js index 200b659a6..6c5dd3244 100644 --- a/app/frontend/src/javascript/lib/devise-modal.js +++ b/app/frontend/src/javascript/lib/devise-modal.js @@ -28,7 +28,7 @@ } if (!promise) { promise = $uibModal.open({ - templateUrl: 'deviseModal.html', + templateUrl: '../../../templates/shared/deviseModal.html', controller: function ($scope, $uibModalInstance) { const user = $scope.user = {}; $scope.login = function () { diff --git a/app/frontend/templates/admin/invoices/payment.html b/app/frontend/templates/admin/invoices/payment.html index 019845fc0..037b2a310 100644 --- a/app/frontend/templates/admin/invoices/payment.html +++ b/app/frontend/templates/admin/invoices/payment.html @@ -61,54 +61,3 @@ - - diff --git a/app/frontend/templates/admin/invoices/settings.html b/app/frontend/templates/admin/invoices/settings.html index 84910a372..247e97d72 100644 --- a/app/frontend/templates/admin/invoices/settings.html +++ b/app/frontend/templates/admin/invoices/settings.html @@ -94,43 +94,6 @@ - - - - - - - - - - - - - - diff --git a/app/frontend/templates/admin/invoices/settings/editCode.html b/app/frontend/templates/admin/invoices/settings/editCode.html new file mode 100644 index 000000000..3ac4e5d2e --- /dev/null +++ b/app/frontend/templates/admin/invoices/settings/editCode.html @@ -0,0 +1,27 @@ +
+ + + +
diff --git a/app/frontend/templates/admin/invoices/settings/editNumber.html b/app/frontend/templates/admin/invoices/settings/editNumber.html new file mode 100644 index 000000000..c37d107f3 --- /dev/null +++ b/app/frontend/templates/admin/invoices/settings/editNumber.html @@ -0,0 +1,31 @@ +
+ + + +
diff --git a/app/frontend/templates/admin/invoices/settings/editPrefix.html b/app/frontend/templates/admin/invoices/settings/editPrefix.html new file mode 100644 index 000000000..7c59f081c --- /dev/null +++ b/app/frontend/templates/admin/invoices/settings/editPrefix.html @@ -0,0 +1,20 @@ +
+ + + +
diff --git a/app/frontend/templates/admin/invoices/settings/editReference.html b/app/frontend/templates/admin/invoices/settings/editReference.html new file mode 100644 index 000000000..3cb09f768 --- /dev/null +++ b/app/frontend/templates/admin/invoices/settings/editReference.html @@ -0,0 +1,34 @@ +
+ + + +
diff --git a/app/frontend/templates/admin/invoices/settings/editVAT.html b/app/frontend/templates/admin/invoices/settings/editVAT.html new file mode 100644 index 000000000..8ffd8ce9a --- /dev/null +++ b/app/frontend/templates/admin/invoices/settings/editVAT.html @@ -0,0 +1,54 @@ +
+ + + +
diff --git a/app/frontend/templates/admin/invoices/settings/stripeKeys.html b/app/frontend/templates/admin/invoices/settings/stripeKeys.html new file mode 100644 index 000000000..a468239f9 --- /dev/null +++ b/app/frontend/templates/admin/invoices/settings/stripeKeys.html @@ -0,0 +1,48 @@ +
+ + + +
diff --git a/app/frontend/templates/admin/settings/newSelectOption.html b/app/frontend/templates/admin/settings/newSelectOption.html new file mode 100644 index 000000000..5be384d90 --- /dev/null +++ b/app/frontend/templates/admin/settings/newSelectOption.html @@ -0,0 +1,15 @@ +
+ + + +
diff --git a/app/frontend/templates/admin/settings/select-multiple.html b/app/frontend/templates/admin/settings/select-multiple.html index 09cd1dad3..be53200c8 100644 --- a/app/frontend/templates/admin/settings/select-multiple.html +++ b/app/frontend/templates/admin/settings/select-multiple.html @@ -15,21 +15,3 @@ - - diff --git a/app/frontend/templates/calendar/calendar.html b/app/frontend/templates/calendar/calendar.html index 58cb59fb3..1df54dab3 100644 --- a/app/frontend/templates/calendar/calendar.html +++ b/app/frontend/templates/calendar/calendar.html @@ -47,16 +47,3 @@ - - - diff --git a/app/frontend/templates/calendar/filterAside.html b/app/frontend/templates/calendar/filterAside.html new file mode 100644 index 000000000..27e3d9fbb --- /dev/null +++ b/app/frontend/templates/calendar/filterAside.html @@ -0,0 +1,9 @@ +
+ + +
diff --git a/config/webpack/environment.js b/config/webpack/environment.js index 765cd21dc..3c0c2e419 100644 --- a/config/webpack/environment.js +++ b/config/webpack/environment.js @@ -1,5 +1,6 @@ const { environment } = require('@rails/webpacker'); const htmlErb = require('./loaders/html_erb'); +const js = require('./loaders/js'); const jsErb = require('./loaders/js_erb'); const sass = require('./loaders/sass'); const sassErb = require('./loaders/sass_erb'); @@ -21,6 +22,7 @@ environment.plugins.prepend('Provide', new webpack.ProvidePlugin({ environment.loaders.prepend('js-erb', jsErb); environment.loaders.prepend('html-erb', htmlErb); environment.loaders.prepend('sass-erb', sassErb); +environment.loaders.prepend('js', js); environment.loaders.append('html', html); environment.loaders.append('sass', sass); diff --git a/config/webpack/loaders/html.js b/config/webpack/loaders/html.js index 412b95147..cd3506af1 100644 --- a/config/webpack/loaders/html.js +++ b/config/webpack/loaders/html.js @@ -1,4 +1,18 @@ +const path = require('path'); + module.exports = { test: /\.html$/i, - loader: 'html-loader' + exclude: /node_modules/, + use: [ + { + loader: 'ngtemplate-loader', + options: { + relativeTo: path.join(__dirname, '../../../app/frontend/templates'), + requireAngular: true + } + }, + { + loader: 'html-loader' + } + ] }; diff --git a/config/webpack/loaders/html_erb.js b/config/webpack/loaders/html_erb.js index a2d552295..52a15df75 100644 --- a/config/webpack/loaders/html_erb.js +++ b/config/webpack/loaders/html_erb.js @@ -1,7 +1,21 @@ +const path = require('path'); + module.exports = { test: /\.html\.erb$/, - loader: [ - 'html-loader', - 'rails-erb-loader' + exclude: /node_modules/, + use: [ + { + loader: 'ngtemplate-loader', + options: { + relativeTo: path.join(__dirname, '../../../app/frontend/templates'), + requireAngular: true + } + }, + { + loader: 'html-loader' + }, + { + loader: 'rails-erb-loader' + } ] }; diff --git a/config/webpack/loaders/js.js b/config/webpack/loaders/js.js new file mode 100644 index 000000000..85ec79153 --- /dev/null +++ b/config/webpack/loaders/js.js @@ -0,0 +1,12 @@ +module.exports = { + test: /\.js$/, + exclude: /node_modules/, + use: [ + { + loader: 'auto-ngtemplate-loader', + options: { + pathResolver: (p) => p.replace(/src\/javascript\/.*$/, 'templates') + } + } + ] +}; diff --git a/config/webpack/loaders/js_erb.js b/config/webpack/loaders/js_erb.js index d98216819..41586e03f 100644 --- a/config/webpack/loaders/js_erb.js +++ b/config/webpack/loaders/js_erb.js @@ -2,10 +2,18 @@ module.exports = { test: /\.js\.erb$/, enforce: 'pre', exclude: /node_modules/, - use: [{ - loader: 'rails-erb-loader', - options: { - runner: (/^win/.test(process.platform) ? 'ruby ' : '') + 'bin/rails runner' + use: [ + { + loader: 'auto-ngtemplate-loader', + options: { + pathResolver: (p) => p.replace(/src\/javascript\/.*$/, 'templates') + } + }, + { + loader: 'rails-erb-loader', + options: { + runner: (/^win/.test(process.platform) ? 'ruby ' : '') + 'bin/rails runner' + } } - }] + ] }; diff --git a/package.json b/package.json index 5d1f38ffb..a4a62fad3 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ }, "license": "AGPL-3.0-only", "devDependencies": { + "auto-ngtemplate-loader": "^3.1.0", "eslint": "~6.8.0", "eslint-config-standard": "~14.1.1", "eslint-plugin-import": "~2.20.1", @@ -25,6 +26,7 @@ "eslint-plugin-promise": "~4.2.1", "eslint-plugin-standard": "~4.0.1", "html-loader": "^1.3.0", + "ngtemplate-loader": "^2.1.0", "rails-erb-loader": "^5.5.2", "resolve-url-loader": "^3.1.1", "webpack": "^4.44.1", diff --git a/yarn.lock b/yarn.lock index 1b306b788..57b5a95b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1615,6 +1615,17 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +auto-ngtemplate-loader@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/auto-ngtemplate-loader/-/auto-ngtemplate-loader-3.1.0.tgz#2b71b8943c976d64e08a2ca84ca85beb2579e6d2" + integrity sha512-HUvEuVZ45EW74ejU2H4zgSRxKdpGgtOIt619g9gwZGHlaRLsCwA50HiH0JcC968j6mbBmijV5fZgLSLlItaltA== + dependencies: + html-loader "~1.3.0" + loader-utils "~2.0.0" + lodash "~4.17.20" + ngtemplate-loader "~2.1.0" + var-validator "0.0.3" + autoprefixer@^9.6.1: version "9.8.6" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" @@ -4235,6 +4246,16 @@ html-loader@^1.3.0: loader-utils "^2.0.0" schema-utils "^2.7.0" +html-loader@~1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-loader/-/html-loader-1.3.1.tgz#16ae142e23daa4f0d67a2ac2fccaa087be5d64e2" + integrity sha512-zL+z9mIhcXEXuHqzriTwZR4ZslZHi5IFNhjyJHyhJlhEgR8VtLTPbqeR5TdbNtHtb88zbVmlNB8ia2vr/GTrbA== + dependencies: + html-minifier-terser "^5.1.1" + htmlparser2 "^4.1.0" + loader-utils "^2.0.0" + schema-utils "^2.7.1" + html-minifier-terser@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" @@ -4913,16 +4934,16 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsesc@^0.5.0, jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -5079,7 +5100,7 @@ loader-utils@1.2.3: emojis-list "^2.0.0" json5 "^1.0.1" -loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -5088,7 +5109,7 @@ loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: emojis-list "^3.0.0" json5 "^1.0.1" -loader-utils@^2.0.0: +loader-utils@^2.0.0, loader-utils@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== @@ -5165,7 +5186,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.19, lodash@^4.17.5, lodash@~4.17.10: +lodash@^4.0.0, lodash@^4.17.11, lodash@^4.17.19, lodash@^4.17.5, lodash@~4.17.10, lodash@~4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== @@ -5632,6 +5653,14 @@ ngUpload@0.5: resolved "https://registry.yarnpkg.com/ngUpload/-/ngUpload-0.5.21.tgz#86285977db61f03e4080951e4712fa3b1921978c" integrity sha512-QHfUOR/ASzDqXvPArEMJJBUHn72wY2jbxKGdlQvQJJCtxqnVjRFg0X5hXR40uoC1meaVzCnnSGDJwlY6JWjvmQ== +ngtemplate-loader@^2.1.0, ngtemplate-loader@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ngtemplate-loader/-/ngtemplate-loader-2.1.0.tgz#fb71c614c509b114b3bb28a828cb608757531e96" + integrity sha512-8t1a2YOb1vk1A4C74o1ru+T7UeyKDdABWXtGDkjBupmOaV/RPCXjLLF4UZMI45Lfpebkr2p4NlVSROXRshkIhg== + dependencies: + jsesc "^0.5.0" + loader-utils "^1.0.2" + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -8712,6 +8741,11 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +var-validator@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/var-validator/-/var-validator-0.0.3.tgz#8c20155a350373233a542d3e5aed046c90891d70" + integrity sha1-jCAVWjUDcyM6VC0+Wu0EbJCJHXA= + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"