danielebarchiesi@0
|
1 (function($){
|
danielebarchiesi@0
|
2 /**
|
danielebarchiesi@0
|
3 * To make a form auto submit, all you have to do is 3 things:
|
danielebarchiesi@0
|
4 *
|
danielebarchiesi@0
|
5 * ctools_add_js('auto-submit');
|
danielebarchiesi@0
|
6 *
|
danielebarchiesi@0
|
7 * On gadgets you want to auto-submit when changed, add the ctools-auto-submit
|
danielebarchiesi@0
|
8 * class. With FAPI, add:
|
danielebarchiesi@0
|
9 * @code
|
danielebarchiesi@0
|
10 * '#attributes' => array('class' => array('ctools-auto-submit')),
|
danielebarchiesi@0
|
11 * @endcode
|
danielebarchiesi@0
|
12 *
|
danielebarchiesi@0
|
13 * If you want to have auto-submit for every form element,
|
danielebarchiesi@0
|
14 * add the ctools-auto-submit-full-form to the form. With FAPI, add:
|
danielebarchiesi@0
|
15 * @code
|
danielebarchiesi@0
|
16 * '#attributes' => array('class' => array('ctools-auto-submit-full-form')),
|
danielebarchiesi@0
|
17 * @endcode
|
danielebarchiesi@0
|
18 *
|
danielebarchiesi@0
|
19 * If you want to exclude a field from the ctool-auto-submit-full-form auto submission,
|
danielebarchiesi@0
|
20 * add the class ctools-auto-submit-exclude to the form element. With FAPI, add:
|
danielebarchiesi@0
|
21 * @code
|
danielebarchiesi@0
|
22 * '#attributes' => array('class' => array('ctools-auto-submit-exclude')),
|
danielebarchiesi@0
|
23 * @endcode
|
danielebarchiesi@0
|
24 *
|
danielebarchiesi@0
|
25 * Finally, you have to identify which button you want clicked for autosubmit.
|
danielebarchiesi@0
|
26 * The behavior of this button will be honored if it's ajaxy or not:
|
danielebarchiesi@0
|
27 * @code
|
danielebarchiesi@0
|
28 * '#attributes' => array('class' => array('ctools-use-ajax', 'ctools-auto-submit-click')),
|
danielebarchiesi@0
|
29 * @endcode
|
danielebarchiesi@0
|
30 *
|
danielebarchiesi@0
|
31 * Currently only 'select', 'radio', 'checkbox' and 'textfield' types are supported. We probably
|
danielebarchiesi@0
|
32 * could use additional support for HTML5 input types.
|
danielebarchiesi@0
|
33 */
|
danielebarchiesi@0
|
34
|
danielebarchiesi@0
|
35 Drupal.behaviors.CToolsAutoSubmit = {
|
danielebarchiesi@0
|
36 attach: function(context) {
|
danielebarchiesi@0
|
37 // 'this' references the form element
|
danielebarchiesi@0
|
38 function triggerSubmit (e) {
|
danielebarchiesi@0
|
39 var $this = $(this);
|
danielebarchiesi@0
|
40 if (!$this.hasClass('ctools-ajaxing')) {
|
danielebarchiesi@0
|
41 $this.find('.ctools-auto-submit-click').click();
|
danielebarchiesi@0
|
42 }
|
danielebarchiesi@0
|
43 }
|
danielebarchiesi@0
|
44
|
danielebarchiesi@0
|
45 // the change event bubbles so we only need to bind it to the outer form
|
danielebarchiesi@0
|
46 $('form.ctools-auto-submit-full-form', context)
|
danielebarchiesi@0
|
47 .add('.ctools-auto-submit', context)
|
danielebarchiesi@0
|
48 .filter('form, select, input:not(:text, :submit)')
|
danielebarchiesi@0
|
49 .once('ctools-auto-submit')
|
danielebarchiesi@0
|
50 .change(function (e) {
|
danielebarchiesi@0
|
51 // don't trigger on text change for full-form
|
danielebarchiesi@0
|
52 if ($(e.target).is(':not(:text, :submit, .ctools-auto-submit-exclude)')) {
|
danielebarchiesi@0
|
53 triggerSubmit.call(e.target.form);
|
danielebarchiesi@0
|
54 }
|
danielebarchiesi@0
|
55 });
|
danielebarchiesi@0
|
56
|
danielebarchiesi@0
|
57 // e.keyCode: key
|
danielebarchiesi@0
|
58 var discardKeyCode = [
|
danielebarchiesi@0
|
59 16, // shift
|
danielebarchiesi@0
|
60 17, // ctrl
|
danielebarchiesi@0
|
61 18, // alt
|
danielebarchiesi@0
|
62 20, // caps lock
|
danielebarchiesi@0
|
63 33, // page up
|
danielebarchiesi@0
|
64 34, // page down
|
danielebarchiesi@0
|
65 35, // end
|
danielebarchiesi@0
|
66 36, // home
|
danielebarchiesi@0
|
67 37, // left arrow
|
danielebarchiesi@0
|
68 38, // up arrow
|
danielebarchiesi@0
|
69 39, // right arrow
|
danielebarchiesi@0
|
70 40, // down arrow
|
danielebarchiesi@0
|
71 9, // tab
|
danielebarchiesi@0
|
72 13, // enter
|
danielebarchiesi@0
|
73 27 // esc
|
danielebarchiesi@0
|
74 ];
|
danielebarchiesi@0
|
75 // Don't wait for change event on textfields
|
danielebarchiesi@0
|
76 $('.ctools-auto-submit-full-form input:text, input:text.ctools-auto-submit', context)
|
danielebarchiesi@0
|
77 .filter(':not(.ctools-auto-submit-exclude)')
|
danielebarchiesi@0
|
78 .once('ctools-auto-submit', function () {
|
danielebarchiesi@0
|
79 // each textinput element has his own timeout
|
danielebarchiesi@0
|
80 var timeoutID = 0;
|
danielebarchiesi@0
|
81 $(this)
|
danielebarchiesi@0
|
82 .bind('keydown keyup', function (e) {
|
danielebarchiesi@0
|
83 if ($.inArray(e.keyCode, discardKeyCode) === -1) {
|
danielebarchiesi@0
|
84 timeoutID && clearTimeout(timeoutID);
|
danielebarchiesi@0
|
85 }
|
danielebarchiesi@0
|
86 })
|
danielebarchiesi@0
|
87 .keyup(function(e) {
|
danielebarchiesi@0
|
88 if ($.inArray(e.keyCode, discardKeyCode) === -1) {
|
danielebarchiesi@0
|
89 timeoutID = setTimeout($.proxy(triggerSubmit, this.form), 500);
|
danielebarchiesi@0
|
90 }
|
danielebarchiesi@0
|
91 })
|
danielebarchiesi@0
|
92 .bind('change', function (e) {
|
danielebarchiesi@0
|
93 if ($.inArray(e.keyCode, discardKeyCode) === -1) {
|
danielebarchiesi@0
|
94 timeoutID = setTimeout($.proxy(triggerSubmit, this.form), 500);
|
danielebarchiesi@0
|
95 }
|
danielebarchiesi@0
|
96 });
|
danielebarchiesi@0
|
97 });
|
danielebarchiesi@0
|
98 }
|
danielebarchiesi@0
|
99 }
|
danielebarchiesi@0
|
100 })(jQuery);
|