1jQuery(function($) { 2 var CLASS_REQUIRED = 'tf-required'; 3 var CLASS_KATAKANA = 'tf-katakana'; 4 var CLASS_TEL = 'tf-tel'; 5 var CLASS_ZIPCODE = 'tf-zipcode'; 6 var CLASS_FILLED = 'tf-filled'; 7 var CLASS_IGNORE = 'tf-ignore'; 8 var CLASS_AUTOKANA = 'tf-autokana'; 9 var CLASS_AUTOKANA_KATAKANA = 'tf-autokana-katakana'; 10 var CLASS_AJAXZIP3 = 'tf-ajaxzip3'; 11 var CLASS_INPUT_ERROR = 'tf-input-error'; 12 var CLASS_REQUIRE_COUNTER_TOTAL = 'tf-require-counter-total'; 13 var CLASS_REQUIRE_COUNTER_REMAIN = 'tf-require-counter-remain'; 14 var CLASS_ERROR_ANCHOR = 'tf-error-anchor'; 15 var DATA_AUTOKANA = 'data-autokana'; 16 var DATA_ONKEYUP = 'data-onkeyup'; 17 18 19 /****************************************************** 20 * ãã¡ã¤ã«ãã£ã¼ã«ãç¨ã¯ã©ã¹ 21 ******************************************************/ 22 function TfMwwpformField($field, $form) { 23 this.$form = $form; 24 this.$field = $field; 25 this.rawName = this.$field.attr('name'); 26 this.name = this._normalizeName(this.rawName); 27 } 28 TfMwwpformField.prototype = { 29 getField: function() { 30 return this.$field; 31 }, 32 getName: function() { 33 return this.name; 34 }, 35 getRawName: function() { 36 return this.rawName; 37 }, 38 isEmpty: function() { 39 return this.$field.val() === ''; 40 }, 41 _normalizeName: function(name) { 42 return (new RegExp('([^\\[]*)(\\[(.*)\\])*$')).exec(name)[1]; 43 } 44 } 45 46 /****************************************************** 47 * ãã§ãã¯ããã¯ã¹ + ã©ã¸ãªãã¿ã³ç¨ã¯ã©ã¹ 48 ******************************************************/ 49 function TfMwwpformMultiField($field, $form) { 50 this.$form = $form; 51 this.$field = $field; 52 this.rawName = this.$field.attr('name'); 53 this.name = this._normalizeName(this.rawName); 54 } 55 TfMwwpformMultiField.prototype = $.extend(TfMwwpformMultiField.prototype, TfMwwpformField.prototype); 56 TfMwwpformMultiField.prototype.isEmpty = function() { 57 var name = this.rawName; 58 59 var $related = this.$form.find('[name="' + name +'"]'); 60 var isEmpty = true; 61 $related.each(function() { 62 if ($(this).is(':checked')) { 63 isEmpty = false; 64 return false; 65 } 66 }); 67 return isEmpty; 68 }; 69 70 /****************************************************** 71 * ãã¡ã¤ã«ãã£ã¼ã«ãç¨ã¯ã©ã¹ 72 * 73 * MW WP Formã®ä»æ§ 74 * ã»ãã¡ã¤ã«ãã£ã¼ã«ãã®ãããã¿ã³ãæ¼ãã¨inputãä¸åº¦åé¤ãããå度追å ããã 75 * ã»ç¢ºèªç»é¢ã®æç¹ã§ãã¡ã¤ã«ã¯ã¢ãããã¼ãããã 76 * ã»ç¢ºèªç»é¢ããå ¥åç»é¢ã«æ»ã£ãæãã¢ãããã¼ããããã¡ã¤ã«ã®URLãinput[type="hidden"]ã«è¨ç½®ããã 77 * ã»ç¢ºèªç»é¢ããå ¥åç»é¢ã«æ»ã£ãæãinput[type="file"]ã®æ¹ã¯ç©ºã«ãªã 78 * ã»input[type="file"]ãinput[type="hidden"]ãname屿§ã¯åããã®ã使ç¨ããã 79 ******************************************************/ 80 function TfMwwpformFileField($field) { 81 this.deleteButton = $field.next(); 82 this.rawName = $field.attr('name'); 83 this.name = this.rawName; 84 } 85 TfMwwpformFileField.prototype = $.extend(TfMwwpformFileField.prototype, TfMwwpformField.prototype); 86 TfMwwpformFileField.prototype.getField = function() { 87 return this.deleteButton.prev(); 88 }; 89 TfMwwpformFileField.prototype.isEmpty = function() { 90 var $fileField = this.getField(); 91 var $hiddenField = this._getHiddenField(); 92 return $fileField.val() === '' && !($hiddenField.length && $hiddenField.val()); 93 }; 94 TfMwwpformFileField.prototype._getHiddenField = function() { 95 return this.deleteButton.nextAll('.mw-wp-form_file').find('input[type="hidden"]'); 96 } 97 98 99 /****************************************************** 100 * ãµãããããã¿ã³ç¨ã¯ã©ã¹ 101 ******************************************************/ 102 function TfMwwpformSubmitButton($form) { 103 this.disabledText = 'å ¥åãå®äºãã¦ãã¾ãã'; 104 this.$submitButtons = $form.find('[type="submit"]'); 105 var self = this; 106 this.$submitButtons.each(function() { 107 var $submit = $(this); 108 $submit.data('original-text', self.getCurrentText($submit)); 109 }); 110 } 111 112 TfMwwpformSubmitButton.prototype = { 113 /** 114 * ãµãããããã¿ã³ãç¡å¹åããã 115 */ 116 disable: function() { 117 var self = this; 118 this.$submitButtons.each(function() { 119 self.setCurrentText($(this), self.disabledText); 120 }); 121 // this.$submitButtons.prop('disabled', true); 122 this.$submitButtons.addClass('disabled'); 123 }, 124 125 /** 126 * ãµãããããã¿ã³ãæå¹åããã 127 */ 128 enable: function() { 129 var self = this; 130 this.$submitButtons.each(function() { 131 self.setCurrentText($(this), $(this).data('original-text')); 132 }); 133 this.$submitButtons.removeClass('disabled'); 134 }, 135 136 /** 137 * ç¡å¹ç¶æ ã§è¡¨ç¤ºããããã¹ãã夿´ããã 138 * @param {string} text 139 */ 140 setDisabledText: function(text) { 141 this.disabledText = text; 142 var self = this; 143 this.$submitButtons.each(function() { 144 var $submit = $(this); 145 if ($submit.hasClass('disabled') === true) { 146 self.setCurrentText($submit, text); 147 } 148 }); 149 }, 150 151 /** 152 * ã¯ãªãã¯æã®å¦çãè¨å®ããã 153 */ 154 onclick: function(func, caller) { 155 this.$submitButtons.on('click', function() { 156 return func.apply(caller); 157 }); 158 }, 159 160 /** 161 * ãã¿ã³ããã¹ããåå¾ããã 162 * @param {jQuery} $submit 163 * @returns string 164 */ 165 getCurrentText: function($submit) { 166 var tagName = $submit.prop('tagName'); 167 if (tagName === 'BUTTON') { 168 return $submit.text(); 169 } else if (tagName === 'INPUT') { 170 return $submit.val(); 171 } 172 }, 173 174 /** 175 * ãã¿ã³ããã¹ãã夿´ããã 176 * @param {jQuery} $submit 177 * @param {string} text 178 */ 179 setCurrentText: function($submit, text) { 180 var tagName = $submit.prop('tagName'); 181 if (tagName === 'BUTTON') { 182 $submit.text(text); 183 } else if (tagName === 'INPUT') { 184 $submit.val(text); 185 } 186 } 187 } 188 189 190 /****************************************************** 191 * å¿ é é ç®ã«ã¦ã³ã¿ã¼ç¨ã¯ã©ã¹ 192 ******************************************************/ 193 function TfMwwpformRequireCounter($form, fields, validator) { 194 this.$form = $form; 195 this.validator = validator; 196 this.requiredFields = this.filterRequiredFields(fields); 197 } 198 199 TfMwwpformRequireCounter.prototype = { 200 /** 201 * ãã£ã¼ã«ãã®ãã¡ãå¿ é é ç®ã®ãã£ã¼ã«ãã®ã¿ãåãåºã 202 * @param {TfMwwpformField[]} fields 203 * @returns jQuery 204 */ 205 filterRequiredFields: function(fields) { 206 var requiredFieldMap = {}; 207 var requiredFields = []; 208 fields.forEach(function(field) { 209 var $field = field.getField(); 210 var name = field.getName(); 211 if ($field.hasClass(CLASS_REQUIRED) && requiredFieldMap[name] !== true) { 212 requiredFieldMap[name] = true; 213 requiredFields.push(field); 214 } 215 }); 216 return requiredFields; 217 }, 218 219 /** 220 * å¿ é é ç®ã®ãã¡ãæªå ¥åã¾ãã¯ã¨ã©ã¼ã®ããé ç®ãæ°ããã 221 * æªå ¥åã®æ°ã .tf-require-counter-remain ã¯ã©ã¹ãæã¤è¦ç´ ã«åºåããã 222 * å¿ é é ç®ã®ç·æ°ã .tf-require-counter-total ã¯ã©ã¹ãæã¤è¦ç´ ã«åºåããã 223 */ 224 count: function() { 225 var $form = this.$form;
226 var validator = this.validator; 227 var remain = 0; 228 this.requiredFields.forEach(function(field) { 229 if (validator.validate(field, $form) !== true) { 230 remain++; 231 } 232 }); 233 234 this.total = this.requiredFields.length; 235 this.remain = remain; 236 237 $form.find('.' + CLASS_REQUIRE_COUNTER_TOTAL).html(this.total); 238 $form.find('.' + CLASS_REQUIRE_COUNTER_REMAIN).html(this.remain); 239 } 240 }; 241 242 /****************************************************** 243 * ã¨ã©ã¼ã¡ãã»ã¼ã¸é¢é£ã®å¦çãè¡ãã¯ã©ã¹ 244 * @param {jQuery} $form 245 * @param {TfMwwpformField[]} fields 246 ******************************************************/ 247 function TfMwwpformErrorManager($form, fields) { 248 this.$form = $form; 249 this.fieldMap = this.createFieldMap(fields); 250 } 251 252 TfMwwpformErrorManager.prototype = { 253 /** 254 * ãã£ã¼ã«ãã¨ã¨ã©ã¼ã¡ãã»ã¼ã¸è¡¨ç¤ºç¨è¦ç´ ã®å¯¾å¿ã¥ããããã使ãã 255 * @param {array} fields 256 * @returns Object 257 */ 258 createFieldMap: function(fields) { 259 var fieldMap = []; 260 var self = this; 261 fields.forEach(function(field) { 262 var $field = field.getField(); 263 var name = field.getName(); 264 var $errorMessageElement; 265 266 if (fieldMap[name]) { 267 fieldMap[name].field = fieldMap[name].field.add($field); 268 return; 269 } 270 271 $errorMessageElement = self.findErrorMessageElement(name); 272 if ($errorMessageElement === null) { 273 $errorMessageElement = self.createErrorMessageElement(field); 274 } 275 276 if (!$errorMessageElement.hasClass('tf-error')) { 277 $errorMessageElement.addClass('tf-error'); 278 } 279 280 fieldMap[name] = { 281 field: $field, 282 errorMessageElement: $errorMessageElement, 283 }; 284 }); 285 return fieldMap; 286 }, 287 288 /** 289 * æå®ãããã£ã¼ã«ãåã«å¯¾å¿ããã¨ã©ã¼ã¡ãã»ã¼ã¸è¡¨ç¤ºç¨ã®è¦ç´ ãåå¾ãã 290 * ãã£ã¼ã«ãåã«ã¯[]ãå«ã¾ãªããã®ã使ç¨ãã 291 * @param {string} name 292 * @returns jQuery|null 293 */ 294 findErrorMessageElement: function(name) { 295 var $errorMessageElement = this.$form.find('.tf-error-' + name); 296 if ($errorMessageElement.length === 0) { 297 return null; 298 } 299 return $errorMessageElement; 300 }, 301 302 /** 303 * æå®ãããã£ã¼ã«ãã«å¯¾å¿ããã¨ã©ã¼ã¡ãã»ã¼ã¸è¡¨ç¤ºç¨ã®è¦ç´ ã使ãã 304 * @param {TfMwwpformField} field 305 * @returns jQuery 306 */ 307 createErrorMessageElement: function(field) { 308 var name = field.getName(); 309 var errorMessageClass = 'tf-error-' + name; 310 var $errorMessageElement = $('<span>'); 311 $errorMessageElement.addClass('tf-error'); 312 $errorMessageElement.addClass(errorMessageClass); 313 $errorMessageElement.insertAfter(field.getField()); 314 $errorMessageElement.hide(); 315 return $errorMessageElement; 316 }, 317 318 /** 319 * 弿°ã«ãã£ã¼ã«ãåãæå®ãã¦ã¨ã©ã¼ã¡ãã»ã¼ã¸ã表示ãã 320 * @param {string} name 321 * @param {string} errorMessage 322 */ 323 setErrorMessageByName: function(name, errorMessage) { 324 var $field = this.fieldMap[name].field; 325 var $errorMessageElement = this.fieldMap[name].errorMessageElement; 326 $field.addClass(CLASS_INPUT_ERROR); 327 $errorMessageElement.html(errorMessage); 328 $errorMessageElement.show(); 329 }, 330 331 /** 332 * 弿°ã«ãã£ã¼ã«ããæå®ãã¦ã¨ã©ã¼ã¡ãã»ã¼ã¸ã表示ãã 333 * @param {TfMwwpformField} field 334 * @param {string} errorMessage 335 */ 336 setErrorMessageByField: function(field, errorMessage) { 337 var name = field.getName(); 338 this.setErrorMessageByName(name, errorMessage); 339 }, 340 341 /** 342 * 弿°ã«ãã£ã¼ã«ãåãæå®ãã¦ã¨ã©ã¼ã¡ãã»ã¼ã¸ãæ¶å»ãã 343 * @param {string} name 344 */ 345 clearErrorMessageByName: function(name) { 346 var $field = this.fieldMap[name].field; 347 var $errorMessageElement = this.fieldMap[name]['errorMessageElement']; 348 $field.removeClass(CLASS_INPUT_ERROR); 349 $errorMessageElement.html(''); 350 $errorMessageElement.hide(); 351 }, 352 353 /** 354 * 弿°ã«ãã£ã¼ã«ããæå®ãã¦ã¨ã©ã¼ã¡ãã»ã¼ã¸ãæ¶å»ãã 355 * @param {TfMwwpformField}
355 field 356 */ 357 clearErrorMessageByField: function(field) { 358 var name = field.getName(); 359 this.clearErrorMessageByName(name); 360 }, 361 } 362 363 364 /****************************************************** 365 * æ£å¸¸ãªå¤ãå ¥åããã¦ãããã©ããã®ãã¼ã«ã¼ç¨ã¯ã©ã¹ 366 * .tf-marker-{name} ã¯ã©ã¹ãæã¤è¦ç´ ãè¨ç½®ããã¨ã 367 * {name}ã«æå®ãããã£ã¼ã«ãã«æ£å¸¸ãªå¤ãå ¥åããã¦ããå ´åã« .tf-filled ã¯ã©ã¹ãä»ä¸ãããã 368 * .tf-marker-{name} ã¯ã©ã¹ãè¤æ°è¨å®ãããã¨ãå¯è½ã 369 * ãã®å ´åã¯å ¨ã¦ã®ãã£ã¼ã«ããå ¥åããã¦ããå ´åã®ã¿ .tf-filled ã¯ã©ã¹ãä»ä¸ãããã 370 ******************************************************/ 371 function TfMwwpformFillMarker($marker) { 372 this.$marker = $marker; 373 this.fillMap = {}; 374 } 375 376 TfMwwpformFillMarker.prototype = { 377 addField: function(field) { 378 this.fillMap[field.getRawName()] = false; 379 this.update(); 380 }, 381 382 filled: function(field) { 383 this.fillMap[field.getRawName()] = true; 384 this.update(); 385 }, 386 387 unfilled: function(field) { 388 this.fillMap[field.getRawName()] = false; 389 this.update(); 390 }, 391 392 isFilledAll: function() { 393 var keys = Object.keys(this.fillMap); 394 var i; 395 for (i = 0; i < keys.length; i++) { 396 if (this.fillMap[keys[i]] === false) return false; 397 } 398 return true; 399 }, 400 401 update: function() { 402 this.$marker.toggleClass(CLASS_FILLED, this.isFilledAll()); 403 } 404 } 405 406 407 /****************************************************** 408 * å ¥åå¤ãã§ãã¯ç¨ã¯ã©ã¹ 409 * ããã©ã«ãã§è¨å®ããã¦ããå ¥åå¤ãã§ãã¯ã¯ã 410 * å¿ é ãã§ãã¯ãã«ã¿ã«ããã§ãã¯ãé»è©±çªå·ãã§ãã¯ãéµä¾¿çªå·ãã§ãã¯ãURLãã§ãã¯ãã¡ã¼ã«ã¢ãã¬ã¹ãã§ãã¯ã®ã¿ã 411 * ãã®ä»ã®ãã§ãã¯ãå¿ è¦ãªå ´å㯠addRule() ã§è¿½å ããã 412 * 413 * ã¨ã©ã¼ã¡ãã»ã¼ã¸ã¯ãã£ã¼ã«ãã®æ¬¡ã®è¦ç´ ã¨ãã¦è¿½å ãããã 414 * ãã ã .tf-error-{name} ã¯ã©ã¹ãæã¤è¦ç´ ãããå ´åã¯ãã®å 容ã䏿¸ããã¦è¡¨ç¤ºããã 415 ******************************************************/ 416 function TfMwwpformValidator() { 417 this.rules = []; 418 this.setDefaultRules(); 419 this.katakanaRegexp = new RegExp("^[\u30A0-\u30FF\x20\u3000]+$"); 420 this.emailRegexp = new RegExp("^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$"); // via HTML Living Standard 421 this.urlRegexp = new RegExp("^(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})$"); // via Stack Overflow(3809401) 422 this.telRegexp = new RegExp("^[0-9\-]*$"); 423 this.zipcodeRegexp = new RegExp("^[0-9]*$"); 424 } 425 426 TfMwwpformValidator.prototype = { 427 /** 428 * ããã©ã«ãã®å ¥åãã§ãã¯ãè¨å®ã 429 * 以ä¸ã®å ¥åãã§ãã¯ãè¡ãã 430 * ã»ã¯ã©ã¹ã« .tf-katakana ãå«ããã£ã¼ã«ãã«å¯¾ãã¦ã®ã«ã¿ã«ããã§ã㯠431 * ã»ã¯ã©ã¹ã« .tf-tel ãå«ããã£ã¼ã«ãã«å¯¾ãã¦ã®é»è©±çªå·ã®æ£å½æ§ãã§ã㯠432 * ã»ã¯ã©ã¹ã« .tf-zipcode ãå«ããã£ã¼ã«ãã«å¯¾ãã¦ã®éµä¾¿çªå·ã®æ£å½æ§ãã§ã㯠433 * ã»type="email" ã®ãã£ã¼ã«ãã«å¯¾ãã¦ã®ã¡ã¼ã«ã¢ãã¬ã¹ã®æ£å½æ§ãã§ã㯠434 * ã»type="url" ã®ãã£ã¼ã«ãã«å¯¾ãã¦ã®URLã®æ£å½æ§ãã§ã㯠435 */ 436 setDefaultRules: function() { 437 // ã«ã¿ã«ãã®æ£å½æ§ãã§ã㯠438 this.addRule(function($field, $form) { 439 if ($field.hasClass(CLASS_KATAKANA) && $field.val() !== '') { 440 if (!(this.katakanaRegexp.test($field.val()))) { 441 return $field.attr('name') + 'ã«ã«ã¿ã«ã以å¤ã®æåãå ¥åããã¦ãã¾ãã'; 442 } 443 } 444 return true; 445 }); 446 447 // é»è©±çªå·ã®æ£å½æ§ãã§ã㯠448 this.addRule(function($field, $form) { 449 if ($field.hasClass(CLASS_TEL) && $field.val() !== '') { 450 var valWithoutHyphen = $field.val().replaceAll('-', ''); 451 if (!(this.telRegexp.test($field.val()))) { 452 return $field.attr('name') + 'ã«æ°åã¨ãã¤ãã³ä»¥å¤ã®æåãå ¥åããã¦ãã¾ãã'; 453 } else if (valWithoutHyphen.length < 9) { 454 return $field.attr('name') + 'ã9æå以ä¸å ¥åããã¦ãã¾ãããç¾å
454¨ã®æåæ°ã¯' + valWithoutHyphen.length + 'æåã§ãã'; 455 } 456 } 457 return true; 458 }); 459 460 // éµä¾¿çªå·ã®æ£å½æ§ãã§ã㯠461 this.addRule(function($field, $form) { 462 if ($field.hasClass(CLASS_ZIPCODE) && $field.val() !== '') { 463 if (!(this.zipcodeRegexp.test($field.val()))) { 464 return $field.attr('name') + 'ã«æ°å以å¤ã®æåãå ¥åããã¦ãã¾ãã'; 465 } else if ($field.val().length < 7) { 466 return $field.attr('name') + 'ã7æå以ä¸å ¥åããã¦ãã¾ãããç¾å¨ã®æåæ°ã¯' + $field.val().length + 'æåã§ãã'; 467 } 468 } 469 return true; 470 }); 471 472 // ã¡ã¼ã«ã¢ãã¬ã¹ã®æ£å½æ§ãã§ã㯠473 this.addRule(function($field, $form) { 474 if ($field.attr('type') === 'email' && $field.val() !== '' && !(this.emailRegexp.test($field.val()))) { 475 return $field.attr('name') + 'ãæ£ããããã¾ããã'; 476 } 477 return true; 478 }); 479 480 // URLã®æ£å½æ§ãã§ã㯠481 this.addRule(function($field, $form) { 482 if ($field.attr('type') === 'url' && $field.val() !== '' && !(this.urlRegexp.test($field.val()))) { 483 return $field.attr('name') + 'ãæ£ããããã¾ããã'; 484 } 485 return true; 486 }); 487 }, 488 489 /** 490 * ãã£ã¼ã«ãã«å¯¾ããå ¥åå¤ãã§ã㯠491 * @param {TfMwwpformField} field 492 * @param {jQuery} $form 493 * @returns ã¨ã©ã¼ãããå ´åã¯ã¨ã©ã¼ã¡ãã»ã¼ã¸ 494 */ 495 validate: function(field, $form) { 496 var $field = field.getField(); 497 var i, error = null; 498 for (i = 0; i < this.rules.length; i++) { 499 error = this.rules[i].apply(this, [$field, $form]); 500 if (error !== true) break; 501 } 502 return error; 503 }, 504 505 /** 506 * å ¥åãã§ãã¯ã«ã¼ã«ã®è¿½å ã 507 * 弿°ã«ä¸ãã颿°ã¯ããã®å¼æ°ã¨ãã¦ãã£ã¼ã«ãï¼jQueryï¼ã¨ãã©ã¼ã ï¼jQueryï¼ãåãåãã 508 * 弿°ã«ä¸ãã颿°ã¯ãã¨ã©ã¼ãããå ´åã¯ã¨ã©ã¼ã¡ãã»ã¼ã¸ãã¨ã©ã¼ããªãå ´å㯠true ãè¿ãå¿ è¦ãããã 509 * @param {function} func 510 */ 511 addRule: function(func) { 512 this.rules.push(func); 513 }, 514 515 /** 516 * ã¯ã©ã¹ã« .tf-required ãå«ããã£ã¼ã«ãã«å¯¾ãã¦ã®å¿ é ãã§ã㯠517 * ãã§ãã¯ããã¯ã¹ã®å ´åã¯ããããä¸ã¤ã«ãã§ãã¯ãå ¥ã£ã¦ããã°OK 518 */ 519 addRequiredRule: function() { 520 // ãã§ãã¯ããã¯ã¹ + ã©ã¸ãªãã¿ã³ 521 this.addRule(function($field, $form) { 522 if ($field.hasClass(CLASS_REQUIRED) && $.inArray($field.attr('type'), ['checkbox', 'radio']) >= 0) { 523 var field = new TfMwwpformMultiField($field, $form); 524 if (field.isEmpty()) { 525 return field.getName() + 'ããã§ãã¯ããã¦ãã¾ããã'; 526 } 527 } 528 return true; 529 }); 530 531 // ãã¡ã¤ã« 532 this.addRule(function($field, $form) { 533 if ($field.hasClass(CLASS_REQUIRED) && ($field.attr('type') === 'file')) { 534 var field = new TfMwwpformFileField($field); 535 if (field.isEmpty()) { 536 return field.getName() + 'ãå ¥åããã¦ãã¾ããã'; 537 } 538 } 539 return true; 540 }); 541 542 // ãã§ãã¯ããã¯ã¹ãã©ã¸ãªãã¿ã³ããã¡ã¤ã«ä»¥å¤ 543 this.addRule(function($field, $form) { 544 if ($field.hasClass(CLASS_REQUIRED) && !($.inArray($field.attr('type'), ['checkbox', 'radio', 'file']) >= 0)) { 545 var field = new TfMwwpformField($field, $form); 546 if (field.isEmpty()) { 547 if ($field.prop('tagName') === 'SELECT') { 548 return field.getName() + 'ã鏿ããã¦ãã¾ããã'; 549 } 550 return field.getName() + 'ãå ¥åããã¦ãã¾ããã'; 551 } 552 } 553 return true; 554 }); 555 } 556 } 557 558 559 /****************************************************** 560 * ãã©ã¼ã ã¯ã©ã¹ 561 * ã¡ã¤ã³ã¨ãªãã¯ã©ã¹ 562 ******************************************************/ 563 function TfMwwpform($form) { 564 this.$form = $form; 565 this.fields = this.findFields(); 566 this.errorManager = new TfMwwpformErrorManager(this.$form, this.fields); 567 this.validator = new TfMwwpformValidator(); 568 this.requireCounter = new TfMwwpformRequireCounter(this.$form, this.fields, this.validator); 569 this.submitButton = new TfMwwpformSubmitButton(this.$form); 570 571 this.initFillMarker(); 572 this.setValidationEvent(); 573 this.initAutokana(); 574 this.initAjaxzip3(); 575 this.initInputmode(); 576 this.initResetButton(); 577 this.requireCounter.count(); 578 this.updateSubmit(); 579 580 this.submitButton.onclick(this.preSubmitCheck, this); 581 } 582 583 TfMwwpform.prototype = { 584 validator: this.validator, 585 586 findFields: function() {
587 var $fields = this.$form.find('input:not([type="hidden"],[type="file"],[type="checkbox"],[type="radio"]), select, textarea').not('.' + CLASS_IGNORE); 588 var fileFields = this.findFileFields(); 589 var multiFields = this.findMultiFields(); 590 var fields = []; 591 var $form = this.$form; 592 $fields.each(function() { 593 fields.push(new TfMwwpformField($(this), $form)); 594 }); 595 return fields.concat(fileFields, multiFields); 596 }, 597 598 /** 599 * ãã¡ã¤ã«ãã£ã¼ã«ããTfMwwpformFileFieldã®é åã§è¿ã 600 * @returns TfMwwpformFileField[] 601 */ 602 findFileFields: function() { 603 var $fileFields = this.$form.find('input[type="file"]').not('.' + CLASS_IGNORE); 604 var fileFields = []; 605 $fileFields.each(function() { 606 fileFields.push(new TfMwwpformFileField($(this))); 607 }); 608 return fileFields; 609 }, 610 611 /** 612 * ãã§ãã¯ããã¯ã¹ + ã©ã¸ãªãã¿ã³ãã£ã¼ã«ããTfMwwpformMultiFieldã®é åã§è¿ã 613 * @returns TfMwwpformMultiField[] 614 */ 615 findMultiFields: function() { 616 var $fields = this.$form.find('input[type="checkbox"],input[type="radio"]').not('.' + CLASS_IGNORE); 617 var $form = this.$form; 618 var fields = []; 619 $fields.each(function() { 620 fields.push(new TfMwwpformMultiField($(this), $form)); 621 }); 622 return fields; 623 }, 624 625 /** 626 * å ¥åå¤ãã§ãã¯è¨å® 627 */ 628 setValidationEvent: function() { 629 var self = this; 630 this.fields.forEach(function(field) { 631 var $field = field.getField(); 632 633 // 確èªç»é¢ããæ»ã£ã¦ããæç¨ 634 self.reloadField(field, false); 635 636 // ãã£ã¼ã«ããããã©ã¼ã«ã¹ãå¤ããæã¾ãã¯ãã§ãã¯ãåãæ¿ããæã®èªã¿åã 637 if ($field.attr('type') === 'checkbox' || $field.attr('type') === 'radio') { 638 $field.on('change', function() { 639 self.reloadField(field, true); 640 }); 641 } else { 642 $field.on('blur', function() { 643 self.reloadField(field, true); 644 }); 645 } 646 }); 647 648 // ãã¡ã¤ã«ãã£ã¼ã«ãã¯MWWPFormã®ä»æ§ä¸ä½¿ãæ¨ã¦ãªã®ã§æ°è¦ã«ä½æãããinput[type="file"]ã«å¯¾ãã¦ããã§ãã¯ãè¡ã 649 this.$form.on('click', 'input[type="file"]', function() { 650 var field = new TfMwwpformFileField($(this)); 651 $(this).on('blur', function() { 652 self.reloadField(field, true); 653 }); 654 }) 655 656 // ãã¡ã¤ã«ãã£ã¼ã«ãã®ãããã¿ã³ãæ¼ããæã«ãã£ã¼ã«ããåãã§ã㯠657 this.$form.find('.mwform-file-delete').each(function() { 658 $(this).on('click', function() { 659 var field = new TfMwwpformFileField($(this).prevAll('input[type="file"]')); 660 setTimeout(function() { 661 self.reloadField(field, true); 662 }, 150); 663 }) 664 }); 665 666 // å¿ é ãã§ãã¯ã追å 667 // åæè¡¨ç¤ºæã«å¿ é ãã§ãã¯ãè¡ãã¨æåããã¨ã©ã¼ã¡ãã»ã¼ã¸ã表示ããã¦ãã¾ãããã 668 // ãããé²ãããã«å¿ é ãã§ãã¯ã®ã¿å¾ãã追å ãã 669 this.validator.addRequiredRule(); 670 }, 671 672 /** 673 * ãã£ã¼ã«ãã®å¤ãèªã¿åããå ¥åå¤ã®ãã§ãã¯åã³ãã¼ã«ã¼ã®è¡¨ç¤ºåãæ¿ããè¡ã 674 * @param {TfMwwpformField} field 675 * @param {bool} reloadErrorMessage ã¨ã©ã¡ãã»ã¼ã¸ãæ´æ°ãããã©ãã 676 */ 677 reloadField: function(field, reloadErrorMessage) { 678 var $field = field.getField(); 679 var result = this.validator.validate(field, this.$form); 680 if (reloadErrorMessage) { 681 this.errorManager.clearErrorMessageByField(field); 682 if (result !== true) { 683 this.errorManager.setErrorMessageByField(field, result); 684 } 685 } 686 if ($field.data('kanafield')) { 687 // èªåããªå ¥åãã£ã¼ã«ããããã°ãã®ãã£ã¼ã«ãã®åãã§ã㯠688 this.reloadField($field.data('kanafield'), reloadErrorMessage); 689 } 690 691 var $marker = this.findMarker(field); 692 $marker.each(function() { 693 var marker = $(this).data('tfMarker'); 694 if (!field.isEmpty() && result === true) { 695 marker.filled(field); 696 } else { 697 marker.unfilled(field); 698 } 699 }); 700 701 this.requireCounter.count(); 702 this.updateSubmit(); 703 }, 704 705 /** 706 * ãã¼ã«ã¼è¦ç´ ã«TfMwwpformFillMarkerã¤ã³ã¹ã¿ã³ã¹ãç´ä»ãã 707 */ 708 initFillMarker: function() { 709 var self = this; 710 this.fields.forEach(function(field) { 711 $marker = self.findMarker(field); 712 $marker.each(function() { 713 var $this = $(this); 714 var marker = $this.data('tfMarker'); 715 if (!marker) { 716 marker = new TfMwwpformFillMarker($marker); 717 $this.data('tfMarker', marker); 718 } 719 marker.addField(field); 720 }); 721 }); 722 }, 723 724 findMarker: function(field) { 725 var name = field.getName(); 726 var $marker = this.$form.find('.tf-marker-' + name); 727 return $marker; 728 }, 729 730 /** 731 * èªåããªå ¥åè¨å® 732 * å¥ã®ãã£ã¼ã«ãã®å ¥åãã¨ã«ããªå ¥åããããå ´åã 733 * ããªå ¥åããããã£ã¼ã«ãã .tf-autokana ã¯ã©ã¹ãæã¤è¦ç´ ã§å²ãã 734 * .tf-autokana ã¯ã©ã¹ãæã¤è¦ç´ ã« data-autokana ã§å ¥åå ã®ãã£ã¼ã«ããæå®ããã 735 * ä¾ï¼ 736 * [mwform_text name="ååï¼æ¼¢åï¼" id="namae"] 737 * <span class="tf-autokana" data-autokana="#namae" name="ååï¼ãµãããªï¼">[mwform_text ...]</span> 738 * 739 * ã«ã¿ã«ãã«ãããå ´å㯠.tf-autokana ã¯ã©ã¹ãæã¤è¦ç´ ã« .tf-autokana-katakana ã追å ããã 740 */ 741 initAutokana: function() { 742 this.$form.find('.' + CLASS_AUTOKANA).each(function(index, autokana) { 743 var $autokana = $(autokana); 744 var $child = $autokana.find('input'); 745 var $parent = $($autokana.attr(DATA_AUTOKANA)); 746 var isKatakana = $autokana.hasClass(CLASS_AUTOKANA_KATAKANA); 747 if ($parent.length) { 748 $.fn.autoKana($parent, $child, {katakana: isKatakana}); 749 $parent.data('kanafield', new TfMwwpformField($child)); 750 } 751 }); 752 }, 753 754 /** 755 * Ajaxzip3è¨å® 756 * éµä¾¿çªå·å ¥åãã£ã¼ã«ãã .tf-ajaxzip3 ã¯ã©ã¹ãæã¤è¦ç´ ã§å²ãã 757 * .tf-ajaxzip3 ã¯ã©ã¹ãæã¤è¦ç´ ã® data-onkeyup ã«è¨è¿°ããã¹ã¯ãªããããã®ã¾ã¾ 758 * éµä¾¿çªå·å ¥åãã£ã¼ã«ãã®OnKeyUp屿§ã¨ãªãã 759 */ 760 initAjaxzip3: function() { 761 this.$form.find('.' + CLASS_AJAXZIP3).each(function(index, ajaxzip3) { 762 var $ajaxzip3 = $(ajaxzip3); 763 var $target = $ajaxzip3.find('input'); 764 var onkeyup = $ajaxzip3.attr(DATA_ONKEYUP); 765 $target.attr('onKeyUp', onkeyup); 766 }); 767 }, 768 769 /** 770 * å ¥åãã¼ãã¼ãã®æå® 771 * .tf-tel ã¯ã©ã¹ãæã¤ãã£ã¼ã«ãã¯é»è©±çªå·ç¨ãã¼ãã¼ãã表示 772 * .tf-zipcode ã¯ã©ã¹ãæã¤ãã£ã¼ã«ãã¯æ°åå ¥åç¨ãã¼ãã¼ãã表示 773 */ 774 initInputmode: function() { 775 this.fields.forEach(function(field) { 776 var $field = field.getField(); 777 if ($field.hasClass(CLASS_TEL)) { 778 $field.attr('inputmode', 'tel'); 779 } 780 if ($field.hasClass(CLASS_ZIPCODE)) { 781 $field.attr('inputmode', 'numeric'); 782 } 783 }); 784 }, 785 786 /** 787 * ãµãããããã¿ã³ã®æå¹/ç¡å¹ãæ´æ° 788 */ 789 updateSubmit: function() { 790 if (this.requireCounter.remain === 0) { 791 this.submitButton.enable(); 792 } else { 793 this.submitButton.disable(); 794 } 795 }, 796 797 /** 798 * ãµãããããã¿ã³ãç¡å¹ç¶æ ã®æã®ããã¹ããè¨å® 799 */ 800 setDisabledSubmitText: function(text) { 801 this.submitButton.setDisabledText(text); 802 }, 803 804 /** 805 * ãµãããããã¿ã³ãæ¼ããæã®æçµãã§ã㯠806 * @returns bool 807 */ 808 preSubmitCheck: function() { 809 var hasError = false;
810 var self = this; 811 var $errorField = null; 812 this.fields.forEach(function(field) { 813 if (self.validator.validate(field, self.$form) !== true) { 814 hasError = true; 815 self.reloadField(field, true); 816 if ( !$errorField ) { 817 $errorField = field.getField(); 818 } 819 return false; 820 } 821 }); 822 823 if (hasError) { 824 var $anchor = this.setErrorAnchor($errorField); 825 console.log($anchor); 826 $("html,body").animate({scrollTop:$anchor.offset().top},300); 827 } 828 829 return !hasError; 830 }, 831 832 /** 833 * ã¨ã©ã¼é¨åã¸ã¹ã¯ãã¼ã«ããããã«ãã¨ã©ã¼é¨åã«ã¿ã°ãè¨ç½®ãã 834 */ 835 setErrorAnchor: function($field) { 836 this.$form.find('.' + CLASS_ERROR_ANCHOR).remove(); 837 var $anchor = $('<span>'); 838 $anchor.addClass(CLASS_ERROR_ANCHOR); 839 $anchor.insertBefore($field); 840 return $anchor; 841 }, 842 843 /** 844 * ãªã»ãããã¿ã³ã®è¨å® 845 */ 846 initResetButton: function() { 847 var canReset = this.$form.hasClass('mw_wp_form_input'); 848 this.$form.find('[type="reset"]').each(function() { 849 var $resetButton = $(this); 850 851 if (!canReset) { 852 $resetButton.hide(); 853 return; 854 } 855 856 $(this).on('click', function() { 857 if (confirm('å ¥åãããå 容ããªã»ãããã¦ãããããã§ããï¼')) { 858 // window.location.reload()ã使ç¨ããã¨ã¹ã¯ãã¼ã«ä½ç½®ãä¿æããã¦ãã¾ãããã 859 // ãããé²ãããã«location.hrefã使ç¨ããã 860 location.href = location.href; 861 } 862 }); 863 }); 864 } 865 } 866 867 868 /****************************************************** 869 * ãã©ã¼ã èªã¿è¾¼ã¿ 870 ******************************************************/ 871 var $forms = $('.mw_wp_form'); 872 $forms.each(function() { 873 var $form = $(this); 874 $form.data('tfMwwpform', new TfMwwpform($form)); 875 }); 876 877 878 /****************************************************** 879 * ã¹ã¯ãã¼ã«ä½ç½®èª¿æ´ 880 ******************************************************/ 881 if (typeof mwform_scroll !== 'undefined') { 882 if (window.innerWidth > 750) { 883 // PC 884 mwform_scroll.offset = -100; 885 } else { 886 // SP 887 mwform_scroll.offset = -50; 888 } 889 } 890});
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.