From 872e07b5e663bbe4ea1c90992c1471f10a54dffd Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Wed, 1 Aug 2018 11:22:12 +0200 Subject: [PATCH] Fix global jQuery usage --- app/javascript/manager/fields/features.js | 19 +++++++++++++++ app/javascript/packs/manager.js | 1 + app/views/champs/siret/index.js.erb | 2 +- .../fields/features_field/_show.html.haml | 19 --------------- .../manager/application/_javascript.html.erb | 23 +++++++++++++++++++ 5 files changed, 44 insertions(+), 20 deletions(-) create mode 100644 app/javascript/manager/fields/features.js create mode 100644 app/javascript/packs/manager.js create mode 100644 app/views/manager/application/_javascript.html.erb diff --git a/app/javascript/manager/fields/features.js b/app/javascript/manager/fields/features.js new file mode 100644 index 000000000..d7e34c65e --- /dev/null +++ b/app/javascript/manager/fields/features.js @@ -0,0 +1,19 @@ +// Administrate injects its own copy of jQuery, and it is the one +// configured by rails to send csrf-token +const $ = window.$; + +$(document).on('change', '#features input[type=checkbox]', ({ target }) => { + target = $(target); + const url = target.data('url'); + const key = target.data('key'); + const value = target.prop('checked'); + + $.ajax(url, { + method: 'put', + contentType: 'application/json', + dataType: 'json', + data: JSON.stringify({ + features: { [key]: value } + }) + }); +}); diff --git a/app/javascript/packs/manager.js b/app/javascript/packs/manager.js new file mode 100644 index 000000000..5ccfba6ab --- /dev/null +++ b/app/javascript/packs/manager.js @@ -0,0 +1 @@ +import '../manager/fields/features'; diff --git a/app/views/champs/siret/index.js.erb b/app/views/champs/siret/index.js.erb index 899f52440..4f13c1678 100644 --- a/app/views/champs/siret/index.js.erb +++ b/app/views/champs/siret/index.js.erb @@ -4,5 +4,5 @@ <% else %> var html = "<%= escape_javascript(render partial: 'shared/champs/siret/etablissement', locals: { position: @champ.order_place, etablissement: @etablissement }) %>"; <% end %> - $("#etablissement-for-<%= @champ.id %>").html(html); + document.querySelector("#etablissement-for-<%= @champ.id %>").innerHTML = html; })(); diff --git a/app/views/fields/features_field/_show.html.haml b/app/views/fields/features_field/_show.html.haml index a9ce32535..d3d864800 100644 --- a/app/views/fields/features_field/_show.html.haml +++ b/app/views/fields/features_field/_show.html.haml @@ -5,22 +5,3 @@ %td= feature.title %td = check_box_tag "enable-feature", "enable", field.data[feature.name], data: { url: enable_feature_manager_administrateur_path(field.resource.id), key: feature.key } - -:javascript - window.onload = function() { - $('#features input[type=checkbox]').on('change', function(evt) { - let url = $(evt.target).data('url'); - let key = $(evt.target).data('key'); - let features = {}; - features[key] = $(evt.target).prop('checked'); - $.ajax(url, { - method: 'put', - contentType: 'application/json', - dataType: 'json', - data: JSON.stringify({ - features: features - }) - }); - }); - }; - diff --git a/app/views/manager/application/_javascript.html.erb b/app/views/manager/application/_javascript.html.erb new file mode 100644 index 000000000..3b7d1a319 --- /dev/null +++ b/app/views/manager/application/_javascript.html.erb @@ -0,0 +1,23 @@ +<%# +# Javascript Partial + +This partial imports the necessary javascript on each page. +By default, it includes the application JS, +but each page can define additional JS sources +by providing a `content_for(:javascript)` block. +%> + +<% Administrate::Engine.javascripts.each do |js_path| %> + <%= javascript_include_tag js_path %> +<% end %> + +<%= javascript_pack_tag 'manager' %> + +<%= yield :javascript %> + +<% if Rails.env.test? %> + <%= javascript_tag do %> + $.fx.off = true; + $.ajaxSetup({ async: false }); + <% end %> +<% end %>