7e32a31a34f382bac76bef7bd1dac7b87800ad60
[yaffs-website] / web / core / misc / form.js
1 /**
2 * DO NOT EDIT THIS FILE.
3 * See the following change record for more information,
4 * https://www.drupal.org/node/2815083
5 * @preserve
6 **/
7
8 (function ($, Drupal, debounce) {
9   $.fn.drupalGetSummary = function () {
10     var callback = this.data('summaryCallback');
11     return this[0] && callback ? $.trim(callback(this[0])) : '';
12   };
13
14   $.fn.drupalSetSummary = function (callback) {
15     var self = this;
16
17     if (typeof callback !== 'function') {
18       var val = callback;
19       callback = function callback() {
20         return val;
21       };
22     }
23
24     return this.data('summaryCallback', callback).off('formUpdated.summary').on('formUpdated.summary', function () {
25       self.trigger('summaryUpdated');
26     }).trigger('summaryUpdated');
27   };
28
29   Drupal.behaviors.formSingleSubmit = {
30     attach: function attach() {
31       function onFormSubmit(e) {
32         var $form = $(e.currentTarget);
33         var formValues = $form.serialize();
34         var previousValues = $form.attr('data-drupal-form-submit-last');
35         if (previousValues === formValues) {
36           e.preventDefault();
37         } else {
38           $form.attr('data-drupal-form-submit-last', formValues);
39         }
40       }
41
42       $('body').once('form-single-submit').on('submit.singleSubmit', 'form:not([method~="GET"])', onFormSubmit);
43     }
44   };
45
46   function triggerFormUpdated(element) {
47     $(element).trigger('formUpdated');
48   }
49
50   function fieldsList(form) {
51     var $fieldList = $(form).find('[name]').map(function (index, element) {
52       return element.getAttribute('id');
53     });
54
55     return $.makeArray($fieldList);
56   }
57
58   Drupal.behaviors.formUpdated = {
59     attach: function attach(context) {
60       var $context = $(context);
61       var contextIsForm = $context.is('form');
62       var $forms = (contextIsForm ? $context : $context.find('form')).once('form-updated');
63       var formFields = void 0;
64
65       if ($forms.length) {
66         $.makeArray($forms).forEach(function (form) {
67           var events = 'change.formUpdated input.formUpdated ';
68           var eventHandler = debounce(function (event) {
69             triggerFormUpdated(event.target);
70           }, 300);
71           formFields = fieldsList(form).join(',');
72
73           form.setAttribute('data-drupal-form-fields', formFields);
74           $(form).on(events, eventHandler);
75         });
76       }
77
78       if (contextIsForm) {
79         formFields = fieldsList(context).join(',');
80
81         var currentFields = $(context).attr('data-drupal-form-fields');
82
83         if (formFields !== currentFields) {
84           triggerFormUpdated(context);
85         }
86       }
87     },
88     detach: function detach(context, settings, trigger) {
89       var $context = $(context);
90       var contextIsForm = $context.is('form');
91       if (trigger === 'unload') {
92         var $forms = (contextIsForm ? $context : $context.find('form')).removeOnce('form-updated');
93         if ($forms.length) {
94           $.makeArray($forms).forEach(function (form) {
95             form.removeAttribute('data-drupal-form-fields');
96             $(form).off('.formUpdated');
97           });
98         }
99       }
100     }
101   };
102
103   Drupal.behaviors.fillUserInfoFromBrowser = {
104     attach: function attach(context, settings) {
105       var userInfo = ['name', 'mail', 'homepage'];
106       var $forms = $('[data-user-info-from-browser]').once('user-info-from-browser');
107       if ($forms.length) {
108         userInfo.map(function (info) {
109           var $element = $forms.find('[name=' + info + ']');
110           var browserData = localStorage.getItem('Drupal.visitor.' + info);
111           var emptyOrDefault = $element.val() === '' || $element.attr('data-drupal-default-value') === $element.val();
112           if ($element.length && emptyOrDefault && browserData) {
113             $element.val(browserData);
114           }
115         });
116       }
117       $forms.on('submit', function () {
118         userInfo.map(function (info) {
119           var $element = $forms.find('[name=' + info + ']');
120           if ($element.length) {
121             localStorage.setItem('Drupal.visitor.' + info, $element.val());
122           }
123         });
124       });
125     }
126   };
127
128   var handleFragmentLinkClickOrHashChange = function handleFragmentLinkClickOrHashChange(e) {
129     var url = void 0;
130     if (e.type === 'click') {
131       url = e.currentTarget.location ? e.currentTarget.location : e.currentTarget;
132     } else {
133       url = location;
134     }
135     var hash = url.hash.substr(1);
136     if (hash) {
137       var $target = $('#' + hash);
138       $('body').trigger('formFragmentLinkClickOrHashChange', [$target]);
139
140       setTimeout(function () {
141         return $target.trigger('focus');
142       }, 300);
143     }
144   };
145
146   var debouncedHandleFragmentLinkClickOrHashChange = debounce(handleFragmentLinkClickOrHashChange, 300, true);
147
148   $(window).on('hashchange.form-fragment', debouncedHandleFragmentLinkClickOrHashChange);
149
150   $(document).on('click.form-fragment', 'a[href*="#"]', debouncedHandleFragmentLinkClickOrHashChange);
151 })(jQuery, Drupal, Drupal.debounce);