diff options
| author | jpl | 2017-02-16 10:51:38 +0100 |
|---|---|---|
| committer | jpl | 2017-02-16 10:51:38 +0100 |
| commit | 3e99839515fa7f7ae653d6b0439e083e6ee2fa31 (patch) | |
| tree | 8cda04b25632d4e230abc8d8378c7a3ca630063e | |
| parent | 4d41a1cc6adbf64d16a9293f883be15d3ee6c03f (diff) | |
| download | chouette-core-3e99839515fa7f7ae653d6b0439e083e6ee2fa31.tar.bz2 | |
fix for moved form-submit buttons (html5 with poly)
| -rw-r--r-- | app/assets/javascripts/plugins/html5-form-attr.js | 69 | ||||
| -rw-r--r-- | app/assets/stylesheets/components/_forms.sass | 5 | ||||
| -rw-r--r-- | app/views/referentials/_form.html.slim | 4 |
3 files changed, 76 insertions, 2 deletions
diff --git a/app/assets/javascripts/plugins/html5-form-attr.js b/app/assets/javascripts/plugins/html5-form-attr.js new file mode 100644 index 000000000..8ec2d7161 --- /dev/null +++ b/app/assets/javascripts/plugins/html5-form-attr.js @@ -0,0 +1,69 @@ +(function($) { + + /** + * polyfill for html5 form attr + */ + var SAMPLE_FORM_NAME, sampleElementFound, sampleForm, sampleFormAndHiddenInput; + SAMPLE_FORM_NAME = 'html-5-polyfill-test'; + sampleForm = $('<form id=\'' + SAMPLE_FORM_NAME + '\'/>'); + sampleFormAndHiddenInput = sampleForm.add($('<input type=\'hidden\' form=\'' + SAMPLE_FORM_NAME + '\'/>')); + sampleFormAndHiddenInput.prependTo('body'); + sampleElementFound = sampleForm[0].elements[0]; + sampleFormAndHiddenInput.remove(); + if (sampleElementFound) { + return; + } + + /** + * Append a field to a form + # + */ + $.fn.appendField = function(data) { + var $form; + if (!this.is('form')) { + return; + } + if (!$.isArray(data) && data.name && data.value) { + data = [data]; + } + $form = this; + $.each(data, function(i, item) { + $('<input/>').attr('type', 'hidden').attr('name', item.name).val(item.value).appendTo($form); + }); + return $form; + }; + + /** + * Find all input fields with form attribute point to jQuery object + * + */ + $('form[id]').submit(function(e) { + var data; + data = $('[form=' + this.id + ']').serializeArray(); + $(this).appendField(data); + }).each(function() { + var $fields, form; + form = this; + $fields = $('[form=' + this.id + ']'); + $fields.filter('button, input').filter('[type=reset],[type=submit]').click(function() { + var type; + type = this.type.toLowerCase(); + if (type === 'reset') { + form.reset(); + $fields.each(function() { + this.value = this.defaultValue; + this.checked = this.defaultChecked; + }).filter('select').each(function() { + $(this).find('option').each(function() { + this.selected = this.defaultSelected; + }); + }); + } else if (type.match(/^submit|image$/i)) { + $(form).appendField({ + name: this.name, + value: this.value + }).submit(); + } + }); + }); +})(jQuery); diff --git a/app/assets/stylesheets/components/_forms.sass b/app/assets/stylesheets/components/_forms.sass index 6e25b9440..e04d0a6ad 100644 --- a/app/assets/stylesheets/components/_forms.sass +++ b/app/assets/stylesheets/components/_forms.sass @@ -331,6 +331,11 @@ $cbx-size: 20px text-rendering: optimizespeed font-weight: 300 + > * + letter-spacing: normal + word-spacing: normal + text-rendering: auto + select.date display: inline-block letter-spacing: normal diff --git a/app/views/referentials/_form.html.slim b/app/views/referentials/_form.html.slim index 648b2718b..ab3c56178 100644 --- a/app/views/referentials/_form.html.slim +++ b/app/views/referentials/_form.html.slim @@ -1,4 +1,4 @@ -= simple_form_for @referential, html: {class: 'form-horizontal'}, wrapper: :horizontal_form do |form| += simple_form_for @referential, html: {class: 'form-horizontal', id: 'referential_form'}, wrapper: :horizontal_form do |form| .row .col-lg-12 @@ -71,4 +71,4 @@ / = link_to 'Annuler', @referential, class: 'btn btn-link' - = form.button :submit, 'Enregistrer', class: 'btn btn-default formSubmitr' + = form.button :submit, 'Enregistrer', class: 'btn btn-default formSubmitr', form: 'referential_form' |
