{"version":3,"file":"/ridea/npm/js/frontend/rd_validation.js","mappings":"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","sources":["webpack:///./public/ridea/js/frontend/rd_validation.js","webpack:///./public/ridea/js/frontend/validation_helper.js"],"sourcesContent":["import 'jquery-validation';\nimport 'jquery-validation/dist/additional-methods';\n\nrequire('./validation_helper')\n","/**\n * 將傳進來的 form 做統一的 validation 設定\n * @param form Form\n * @param button 送交form的按鍵\n * @param validate_params Validate plugin 的參數\n * @param before_observer form檢查完畢,送交form之前要呼叫的事件\n */\n\nwindow.observeForm = function (form, button, validate_params, before_observer) {\n var validator = null;\n\n // 確認無誤後送交\n $(button).on('click', function() {\n // 讓送交按鍵不能被重複按\n $(button).prop(\"disabled\", true);\n let before_observer_result = true;\n\n // 清除 cache\n if (validator !== null) {\n validator.reset();\n }\n\n if (!$(form).valid(validate_params)) {\n $(button).prop(\"disabled\", false);\n } else {\n if (before_observer != null) {\n before_observer_result = before_observer(form, button);\n }\n\n if (before_observer_result)\n {\n // 送交...有未填欄位的話plugin會自動擋下來並且移到未填欄位\n $(button).prop(\"disabled\", false);\n\n showLoadingDialog();\n\n $(form).submit();\n } else {\n $(button).prop(\"disabled\", false);\n }\n }\n });\n\n // 將 form 跟 plugin 綁定\n validator = $(form).validate(validate_params);\n}\n\n// ----------------------------------------------------------------\n// 使用 jquery-ui 的 tool-tip 做提示\n// ----------------------------------------------------------------\n$.validator.setDefaults({\n showErrors: function(map, errorList) {\n\n // there's probably a way to simplify this\n let focussed = document.activeElement;\n\n if (focussed) {\n let _rd_required = $(focussed).closest('.rd_show_validator_error');\n\n // 因為這裡取不到select的focus 所以只能把select的事件寫在下面\n if($(focussed).is(\"input, textarea\") && _rd_required.find('.rd_notice').length > 0){\n _rd_required.find('.rd_notice').remove();\n $(focussed).css(\"border\", \"1px solid #ddd\");\n }\n }\n\n $.each(errorList, function(index, error) {\n\n let element = error.element;\n let target = $(element).closest('.rd_show_validator_error');\n\n if($(element).is(\"input,textarea\")){\n\n if($(target).find('.rd_notice').length > 0){\n $(target).find('.rd_notice').remove();\n $(element).css(\"border\", \"1px solid #ddd\");\n }\n $(element).css(\"border\", \"1px solid #dc3545\");\n\n }else if($(element).is(\"select\")){\n\n if($(target).find('.rd_notice').length > 0){\n $(target).find('.rd_notice').remove();\n $(element).closest('.rd_required').find('.selectric').css(\"border\", \"1px solid #ddd\");\n }\n $(element).closest('.rd_required').find('.selectric').css(\"border\", \"1px solid #dc3545\");\n // 要綁定移除錯誤的事件\n $(element).on('change',function () {\n if($(this).val() !== ''){\n $(this).closest('.rd_required').find('.rd_notice').remove();\n $(this).closest('.rd_required').find('.selectric').css(\"border\", \"1px solid #ddd\");\n }\n });\n }\n $(target).append('
'+error.message+'
');\n });\n },\n invalidHandler: function (form, validator) {\n //若無錯誤則跳過以下步驟\n if (!validator.numberOfInvalids())\n return;\n\n // 以Class「rd_required」為基準,作為捲軸移動參考\n let obj = $(validator.errorList[0].element);\n let top = 0;\n top = obj.closest(\".rd_required\").offset().top;\n\n $('html,body').animate({\n scrollTop: top - $('.rd_header').height()\n }, 500);\n }\n\n});\n\n// ----------------------------------------------------------------\n// 自定義 手機(台灣) 規則\n// ----------------------------------------------------------------\n$.validator.addMethod(\"mobile\", function(value, element) {\n var re = /^09[0-9]{8}$/i;\n\n return (value.length == 0) || re.test(value);\n}, '手機號碼格式錯誤');\n\n// ----------------------------------------------------------------\n// 自定義 E-mail 規則\n// ----------------------------------------------------------------\n$.validator.methods.email = function(value, element, param) {\n var re = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i;\n\n return (value.length == 0) || re.test(value);\n};\n\n// ----------------------------------------------------------------\n// 壓掉原本的 date 檢查方式. Firefox 不支援 'yy-mm-dd' 格式\n// ----------------------------------------------------------------\n$.validator.methods.date = function(a, b, param) {\n\n var dashed_date_only = a.match(/^\\d{4}-\\d{2}-\\d{2}$/); // 檢查 yyyy-mm-dd\n\n return this.optional(b) || !/Invalid|NaN/.test(new Date(a).toString()) || dashed_date_only\n};\n\n// ----------------------------------------------------------------\n// 自定義 是否給予的2個欄位的值是相同的規則\n// ----------------------------------------------------------------\n$.validator.addMethod('equal_values', function(value, element, param) {\n return $(param).val() == value;\n});\n\n// ----------------------------------------------------------------\n// 自定義 上圖必填 區域\n// ----------------------------------------------------------------\n/**\n * rules:{\n image_input: {\n picture: '{ \"old_input\":\"nick_name_icon_o\", \"div\":\".rd_image_border\" }'\n }\n }\n * @param param JSON 文字 (param 參數只能帶文字進來); JSON 中,\n * 必須有舊的 input 的 name 以及 要被變色的 div 的 div id / class\n * 例: '{ \"old_input\":\"nick_name_icon_o\", \"div\":\".rd_image_border\" }'\n */\nvar picture_input_border_color = null;\n$.validator.addMethod('picture', function(value, element, param) {\n\n var params = JSON.parse(param);\n var old_input = $('input[name=\"'+params.old_input+'\"]').val(); // 之前儲存過的圖片的檔名\n var target_div = $(element).closest(params.div); // 要被變更 border color 的 div\n\n // 沒舊的紀錄, 也沒加新的圖片\n if ((old_input == '') && ($(element).val() == '')) {\n\n // 記錄舊的顏色\n if (picture_input_border_color == null) {\n picture_input_border_color = target_div.css('border-left-color');\n } // end of if\n\n // 把 border 改成紅色\n target_div.css({\"border-color\":'#dc3545'});\n\n return false;\n } else {\n // 把 border 恢復成原本顏色\n target_div.css({\"border-color\":picture_input_border_color});\n\n return true;\n } // end of if\n}, \"必需上傳一張圖片\");\n\n// ----------------------------------------------------------------\n// 自定義 date_range 規則\n// ----------------------------------------------------------------\n$.validator.addMethod('date_start', function(value, element, param) {\n var params = JSON.parse(param);\n var start_input = $('input[name=\"' + params.start + '\"]');\n var end_input = $('input[name=\"' + params.end + '\"]');\n var start_date = start_input.val();\n var end_date = end_input.val();\n\n if((Date.parse(end_date)).valueOf() < (Date.parse(start_date)).valueOf()){\n return false;\n }else{\n return true;\n } // end of if\n\n\n\n},\"起始日期不得大於結束日期\");\n\n// ----------------------------------------------------------------\n//    唯一值規則\n// ----------------------------------------------------------------\n/**\n * rules:{\n \"film_type[]\":{\n unique : 'select[name=\"film_type[]\"]'\n },\n }\n * @param check_for 能夠用來找到所有要比對的dom的字串: 例: 'input[name=\"country\"]'\n */\n$.validator.addMethod('unique', function (value, dom, check_for) {\n var less_than_two = true;\n\n $.each($(check_for), function(index, d) {\n // 如果不是自己(目前focus的dom)\n if ((dom != d) && ($(d).val() == value)) {\n less_than_two = false;\n }\n });\n\n return less_than_two;\n});\n\n// ----------------------------------------------------------------\n//    聯絡電話判斷\n// ----------------------------------------------------------------\n$.validator.addMethod(\"phone\", function(value, element) {\n return this.optional(element) || /^[\\d|\\-|\\#|\\*|\\(|\\)]+$/g.test(value);\n}, '請輸入聯絡電話');\n\n// ----------------------------------------------------------------\n//    公司統一編號判斷\n// ----------------------------------------------------------------\n$.validator.addMethod(\"taxNumber\", function(value, element) {\n\n var invoice_number = value;\n var result = false;\n\n if(!isNaN(parseInt(invoice_number))){\n var invoice_number_split = invoice_number.split('').map(function(data){\n return +data;\n });\n var cardinal_number = new Array(1,2,1,2,1,2,4,1);\n var compute = 0;\n\n invoice_number_split.forEach(function(data, i){\n var t = cardinal_number[i] * data;\n\n if(t > 9){\n (t.toString()).split('').forEach(function(data){\n compute += +data;\n });\n } else {\n compute += t;\n }\n });\n\n\n if(compute % 10 == 0){\n result = true;\n }else if(invoice_number_split[6] == 7 && (compute+1) % 10 == 0){\n result = true;\n }\n }\n\n return this.optional(element) || result;\n}, '統一編號格式錯誤');\n\n// ----------------------------------------------------------------\n// 自定義 CkEditor 規則\n// ----------------------------------------------------------------\n$.validator.addMethod('ck_editor', function(value, element, param) {\n\n let element_id = $(element).prop('id');\n let element_name = $(element).prop('name');\n let editor_id = 'cke_' + (element_id != undefined && element_id != '' ? element_id : element_name);\n let editor = $('#'+editor_id);\n\n if(param === true) {\n if (editor.length > 0) {\n var iframe = editor.find('iframe');\n var body = iframe.contents().find(\"body\");\n\n if ((body.html() != '') && (body.html() != '
')) {\n editor.closest('.rd_show_validator_error').find('div:first').css(\"border\", \"1px solid #ddd\");\n editor.closest('.rd_show_validator_error').find('.rd_notice').remove();\n return true;\n } else {\n editor.closest('.rd_show_validator_error').find('div:first').css(\"border\", \"1px solid #dc3545\");\n return false;\n }\n\n } // end of if\n }\n return true;\n},'此為必填欄位');\n\n// ----------------------------------------------------------------\n// 自定義 numeric 規則 僅數字不可有千分位符號\n// ----------------------------------------------------------------\n$.validator.addMethod(\"numeric\", function(value, element) {\n return this.optional(element) || /^[0-9]+\\.?[0-9]*$/.test(value);\n}, '請輸入數字');\n"],"names":["require","window","observeForm","form","button","validate_params","before_observer","validator","$","on","prop","before_observer_result","reset","valid","showLoadingDialog","submit","validate","setDefaults","showErrors","map","errorList","focussed","document","activeElement","_rd_required","closest","is","find","length","remove","css","each","index","error","element","target","this","val","append","message","invalidHandler","numberOfInvalids","top","offset","animate","scrollTop","height","addMethod","value","test","methods","email","param","date","a","b","dashed_date_only","match","optional","Date","toString","picture_input_border_color","params","JSON","parse","old_input","target_div","div","start_input","start","end_input","end","start_date","end_date","valueOf","dom","check_for","less_than_two","d","invoice_number","result","isNaN","parseInt","invoice_number_split","split","data","cardinal_number","Array","compute","forEach","i","t","element_id","element_name","editor","undefined","body","contents","html"],"sourceRoot":""}