https://www.dambenois.fr/_assets/1bd6f15392ab946578be28156d4ce5df/…/PowermailCondition.js?1709220967
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.