PageSourceSearch

https://www.dambenois.fr/_assets/1bd6f15392ab946578be28156d4ce5df/…/PowermailCondition.js?1709220967

js dambenois.fr collected 2026-10-03 02:46:20 UTC 9,028 bytes, 323 lines download raw bytes

1(function ($) {
2  /**
3   * PowermailCondition functions
4   *
5   * @class PowermailCondition
6   * @param {HTMLFormElement} formElement powermail form
7   * @constructor
8   */
9  function PowermailCondition(formElement) {
10    'use strict';
11
12    /**
13     * Closure for $(formElement)
14     *
15     * @type {jQuery}
16     */
17    var $formElement = $(formElement);
18
19    /**
20     * Classnames of all default fields (used via closure)
21     *
22     * @type {array}
23     */
24    var defaultFieldClassNames = [
25      'powermail_input',
26      'powermail_textarea',
27      'powermail_select',
28      'powermail_radio',
29      'powermail_checkbox'
30    ];
31
32    /**
33     * Listening for changes
34     *
35     * @returns {void}
36     */
37    this.ajaxListener = function () {
38      // initially send form values
39      sendFormValuesToPowermailCond();
40
41      // send form values on a change
42      $(getDefaultFieldClassNamesList()).on('change', function () {
43        sendFormValuesToPowermailCond();
44      });
45
46      $('.iradio input').on('ifChecked', function(event) {
47        sendFormValuesToPowermailCond();
48      });
49
50      $('.icheckbox input').on('ifChanged', function(event) {
51        console.log('ok');
52        sendFormValuesToPowermailCond();
53      });
54    };
55
56    /**
57     * do actions with fields or fieldsets (private)
58     *
59     * @param {array} data
60     * @returns {void}
61     */
62    var processActions = function (data) {
63      if (data.todo !== undefined) {
64        for (var formUid in data.todo) {
65          var $form = $('.powermail_form_' + formUid)
66          for (var pageUid in data.todo[formUid]) {
67
68            // do actions with whole pages
69            var $page = $form.find('.powermail_fieldset_' + pageUid);
70            if (data.todo[formUid][pageUid]['#action'] === 'hide') {
71              hidePage(getFieldsetByUid(pageUid, $form));
72            }
73            if (data.todo[formUid][pageUid]['#action'] === 'un_hide') {
74              showPage(getFieldsetByUid(pageUid, $form));
75            }
76
77            // do actions with single fields
78            for (var fieldMarker in data.todo[formUid][pageUid]) {
79              if (data.todo[formUid][pageUid][fieldMarker]['#action'] === 'hide') {
80                hideField(fieldMarker, $form);
81              }
82              if (data.todo[formUid][pageUid][fieldMarker]['#action'] === 'un_hide') {
83                showField(fieldMarker, $form);
84              }
85            }
86          }
87        }
88
89        reInitializeParsleyValidation();
90      }
91    };
92
93    /**
94     * Send form values (private)
95     *
96     * @returns {void}
97     */
98    var sendFormValuesToPowermailCond = function () {
99      var formToSend = $($formElement.get(0));
100      var tempEnabledFields = formToSend.find(':disabled').prop('disabled', false);
101      var dataToSend = new FormData($formElement.get(0));
102      tempEnabledFields.prop('disabled', true);
103      $.ajax({
104        type: 'POST',
105        url: getAjaxUri(),
106        data: dataToSend,
107        contentType: false,
108        processData: false,
109        success: function (data) {
110          if (data.loops === 100) {
111            log('100 loops reached by parsing conditions and rules. Maybe there are conflicting conditions.');
112          }
113          processActions(data);
114        }
115      });
116    };
117
118    /**
119     * Make a required field to a non-required field (private)
120     *
121     * @param {jQuery} $field
122     * @returns {void}
123     */
124    var derequireField = function ($field) {
125      if ($field.prop('required') || $field.data('parsley-required')) {
126        $field.prop('required', false);
127        $field.removeAttr('data-parsley-required');
128        $field.data('powermailcond-required', 'required');
129      }
130    };
131
132    /**
133     * Make a inactive required field required again
134     *
135     * @param {jQuery} $field
136     * @returns {void}
137     */
138    var rerequireField = function ($field) {
139      if ($field.data('powermailcond-required') === 'required') {
140        if (isHtml5ValidationActivated()) {
141          $field.prop('required', 'required');
142        } else if (isParsleyValidationActivated()) {
143          $field.prop('required', 'required');
144        }
145      }
146      $field.removeData('powermailcond-required');
147    };
148
149    /**
150     * Show a powermail field (private)
151     *
152     * @param {string} fieldMarker
153     * @param {jQuery} $form
154     * @returns {void}
155     */
156    var showField = function (fieldMarker, $form) {
157      var $wrappingContainer = $form.find('.powermail_fieldwrap_' + fieldMarker);
158      $wrappingContainer.show();
159      var $field = getFieldByMarker(fieldMarker, $form);
160      $field.prop('disabled', false);
161      rerequireField($field);
162    };
163
164    /**
165     * Hide a powermail field (private)
166     *
167     * @param {string} fieldMarker
168     * @param {jQuery} $form
169     * @returns {void}
170     */
171    var hideField = function (fieldMarker, $form) {
172      var $wrappingContainer = $form.find('.powermail_fieldwrap_' + fieldMarker);
173      $wrappingContainer.hide();
174      var $field = getFieldByMarker(fieldMarker, $form);
175      $field.prop('disabled', true);
176      derequireField($field);
177    };
178
179    /**
180     * Show a powermail page (fieldset)
181     *
182     * @param {jQuery} $page
183     * @returns {void}
184     */
185    var showPage = function ($page) {
186      $page.show();
187    };
188
189    /**
190     * Hide a powermail page (fieldset)
191     *
192     * @param {jQuery} $page
193     * @returns {void}
194     */
195    var hidePage = function ($page) {
196      $page.hide();
197    };
198
199    /**
200     * get page id
201     *
202     * @returns {int}
203     */
204    var getAjaxUri = function () {
205      var uri = $('*[data-condition-uri]').data('condition-uri');
206      if (uri === undefined) {
207        log('Tag with data-condition-uri not found. Maybe TypoScript was not included.');
208      }
209      return uri;
210    };
211
212    /**
213     * Select a powermail field by its name (private)
214     *         name="tx_powermail_pi1[field][fieldMarker]"
215     *         or
216     *         name="tx_powermail_pi1[field][fieldMarker][]"
217     *
218     * @param {string} fieldMarker
219     * @param {jQuery} $form
220     * @returns {jQuery}
221     */
222    var getFieldByMarker = function (fieldMarker, $form) {
223      return $form.find('[name^="tx_powermail_pi1[field][' + fieldMarker + ']"]').not('[type="hidden"]');
224    };
225
226    /**
227     * Select a powermail fieldset (private)
228     *         class="powermail_fieldset_[pageUid]"
229     *
230     * @param {string} pageUid
231     * @param {jQuery} $form
232     * @returns {jQuery}
233     */
234    var getFieldsetByUid = function (pageUid, $form) {
235      return $form.find('.powermail_fieldset_' + pageUid);
236    };
237
238    /**
239     * Convert array to a string list (private)
240     *
241     * @param {array} array
242     * @param {string} itemPrefix
243     * @param {string} glue
244     * @returns {string}
245     */
246    var listFromArray = function (array, itemPrefix, glue) {
247      itemPrefix = typeof itemPrefix !== 'undefined' ? itemPrefix : '';
248      glue = typeof glue !== 'undefined' ? glue : ',';
249
250      var string = '';
251      for (var i = 0; i < array.length; i++) {
252        if (i > 0) {
253          string += glue;
254        }
255        string += itemPrefix + array[i];
256      }
257      return string;
258    };
259
260    /**
261     * get default field class names as string
262     *
263     * @returns {string}
264     */
265    var getDefaultFieldClassNamesList = function () {
266      return listFromArray(defaultFieldClassNames, '.');
267    };
268
269    /**
270     * Check if parsley validation is activated (private)
271     *
272     * @returns {boolean}
273     */
274    var isParsleyValidationActivated = function () {
275      return $formElement.data('parsley-validate') === 'data-parsley-validate';
276    };
277
278    /**
279     * Check if html5 validation is activated (private)
280     *
281     * @returns {boolean}
282     */
283    var isHtml5ValidationActivated = function () {
284      return $formElement.data('validate') === 'html5';
285    };
286
287    /**
288     * Turn off and on parsley validation for a reinitialization (private)
289     *
290     * @returns {void}
291     */
292    var reInitializeParsleyValidation = function () {
293      if (isParsleyValidationActivated()) {
294        $formElement.parsley().destroy();
295        $formElement.parsley();
296      }
297    };
298
299    /**
300     * write message to console
301     *
302     * @param {string|object} message
303     * @return {void}
304     */
305    var log = function (message) {
306      if (typeof console == 'object') {
307        if (typeof message === 'string') {
308          message = 'powermail_cond: ' + message;
309        }
310        console.log(message);
311      }
312    };
313  }
314
315  $(document).ready(function () {
316    setTimeout(function (){
317      $('form.powermail_form').each(function () {
318        (new PowermailCondition(this)).ajaxListener();
319      })
320    }, 1000);
321  });
322
323})(jQuery);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.