{"version":3,"sources":["src/data.js","src/tw-city-selector.js","src/handle-options.js"],"names":["data","TwCitySelector","elRoleName","optionsCustom","arguments","optionsRequired","length","options","error","hasOwnProperty","optionsDefault","property","getOptionsExtend","handleOptions","this","el","getElement","elCounty","elDistrict","elZipcode","init","call","els","document","querySelectorAll","prototype","forEach","self","JSON","parse","stringify","only","getAttribute","replace","split","selectedCounty","selectedDistrict","bootstrapStyle","showDistrict","showZipcode","fragment","createDocumentFragment","county","createElement","appendChild","innerHTML","elOptions","onlyItems","Array","isArray","map","item","index","indexOf","substring","i","j","counties","setAttribute","countyClassName","name","countyFiledName","district","style","display","getDistrictOptions","districtClassName","districtFieldName","zipcode","width","readOnly","type","placeholder","zipcodeFieldName","zipcodeClassName","autocomplete","handler","querySelector","dataset","value","bind","addEventListener","event","createEvent","initEvent","dispatchEvent","fieldClassName","wrapper","cloneNode","parent","countyValue","items","lastIndexOf","districts","reset","selectedIndex"],"mappings":"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","file":"tw-city-selector.min.js","sourcesContent":["export default data;\r\n\r\nvar data = {\r\n // 縣市\r\n counties: [\r\n '臺北市', '基隆市', '新北市', '宜蘭縣', '桃園市', '新竹市', '新竹縣', '苗栗縣',\r\n '臺中市', '彰化縣', '南投縣', '嘉義市', '嘉義縣', '雲林縣', '臺南市', '高雄市',\r\n '澎湖縣', '金門縣', '屏東縣', '臺東縣', '花蓮縣', '連江縣'\r\n ],\r\n\r\n // 區域\r\n districts: [\r\n // 臺北市\r\n [\r\n ['中正區', '大同區', '中山區', '松山區', '大安區', '萬華區', '信義區',\r\n '士林區', '北投區', '內湖區', '南港區', '文山區'],\r\n\r\n ['100', '103', '104', '105', '106', '108', '110', '111', '112', '114', '115', '116']\r\n ],\r\n // 基隆市\r\n [\r\n ['仁愛區', '信義區', '中正區', '中山區', '安樂區', '暖暖區', '七堵區'],\r\n\r\n ['200', '201', '202', '203', '204', '205', '206']\r\n ],\r\n // 新北市\r\n [\r\n ['萬里區', '金山區', '板橋區', '汐止區', '深坑區', '石碇區', '瑞芳區', '平溪區',\r\n '雙溪區', '貢寮區', '新店區', '坪林區', '烏來區', '永和區', '中和區', '土城區',\r\n '三峽區', '樹林區', '鶯歌區', '三重區', '新莊區', '泰山區', '林口區', '蘆洲區',\r\n '五股區', '八里區', '淡水區', '三芝區', '石門區'],\r\n\r\n ['207', '208', '220', '221', '222', '223', '224', '226', '227', '228',\r\n '231', '232', '233', '234', '235', '236', '237', '238', '239', '241',\r\n '242', '243', '244', '247', '248', '249', '251', '252', '253']\r\n ],\r\n // 宜蘭縣\r\n [\r\n ['宜蘭市', '頭城鎮', '礁溪鄉', '壯圍鄉', '員山鄉', '羅東鎮', '三星鄉', '大同鄉',\r\n '五結鄉', '冬山鄉', '蘇澳鎮', '南澳鄉', '釣魚台'],\r\n\r\n ['260', '261', '262', '263', '264', '265', '266', '267', '268', '269',\r\n '270', '272', '290']\r\n ],\r\n // 桃園市\r\n \t[\r\n \t\t['中壢區', '平鎮區', '龍潭區', '楊梅區', '新屋區', '觀音區', '桃園區', '龜山區',\r\n \t\t'八德區', '大溪區', '復興區', '大園區', '蘆竹區'],\r\n\r\n \t\t['320', '324', '325', '326', '327', '328', '330', '333', '334', '335',\r\n \t\t'336', '337', '338']\r\n ],\r\n // 新竹市\r\n [\r\n ['東區', '北區', '香山區'],\r\n\r\n ['300', '300', '300']\r\n ],\r\n // 新竹縣\r\n [\r\n ['竹北市', '湖口鄉', '新豐鄉', '新埔鎮', '關西鎮', '芎林鄉', '寶山鄉',\r\n '竹東鎮', '五峰鄉', '橫山鄉', '尖石鄉', '北埔鄉', '峨眉鄉'],\r\n\r\n ['302', '303', '304', '305', '306', '307', '308', '310', '311',\r\n '312', '313', '314', '315']\r\n ],\r\n // 苗栗縣\r\n [\r\n ['竹南鎮', '頭份市', '三灣鄉', '南庄鄉', '獅潭鄉', '後龍鎮', '通霄鎮', '苑裡鎮',\r\n '苗栗市', '造橋鄉', '頭屋鄉', '公館鄉', '大湖鄉', '泰安鄉',\r\n '銅鑼鄉', '三義鄉', '西湖鄉', '卓蘭鎮'],\r\n\r\n ['350', '351', '352', '353', '354', '356', '357', '358', '360', '361',\r\n '362', '363', '364', '365', '366', '367', '368', '369']\r\n ],\r\n // 臺中市\r\n [\r\n ['中區', '東區', '南區', '西區', '北區', '北屯區', '西屯區', '南屯區', '太平區',\r\n '大里區', '霧峰區', '烏日區', '豐原區', '后里區', '石岡區', '東勢區', '和平區',\r\n '新社區', '潭子區', '大雅區', '神岡區', '大肚區', '沙鹿區', '龍井區', '梧棲區',\r\n '清水區', '大甲區', '外埔區', '大安區'],\r\n\r\n ['400', '401', '402', '403', '404', '406', '407', '408', '411', '412',\r\n '413', '414', '420', '421', '422', '423', '424', '426', '427', '428',\r\n '429', '432', '433', '434', '435', '436', '437', '438', '439']\r\n ],\r\n // 彰化縣\r\n [\r\n ['彰化市', '芬園鄉', '花壇鄉', '秀水鄉', '鹿港鎮', '福興鄉', '線西鄉', '和美鎮',\r\n '伸港鄉', '員林市', '社頭鄉', '永靖鄉', '埔心鄉', '溪湖鎮', '大村鄉', '埔鹽鄉',\r\n '田中鎮', '北斗鎮', '田尾鄉', '埤頭鄉', '溪州鄉', '竹塘鄉', '二林鎮', '大城鄉',\r\n '芳苑鄉', '二水鄉'],\r\n\r\n ['500', '502', '503', '504', '505', '506', '507', '508', '509', '510',\r\n '511', '512', '513', '514', '515', '516', '520', '521', '522', '523',\r\n '524', '525', '526', '527', '528', '530']\r\n ],\r\n // 南投縣\r\n [\r\n ['南投市', '中寮鄉', '草屯鎮', '國姓鄉', '埔里鎮', '仁愛鄉', '名間鄉', '集集鎮',\r\n '水里鄉', '魚池鄉', '信義鄉', '竹山鎮', '鹿谷鄉'],\r\n\r\n ['540', '541', '542', '544', '545', '546', '551', '552', '553', '555',\r\n '556', '557', '558']\r\n ],\r\n // 嘉義市\r\n [\r\n ['東區', '西區'],\r\n\r\n ['600', '600']\r\n ],\r\n // 嘉義縣\r\n [\r\n ['番路鄉', '梅山鄉', '竹崎鄉', '阿里山', '中埔鄉', '大埔鄉', '水上鄉',\r\n '鹿草鄉', '太保市', '朴子市', '東石鄉', '六腳鄉', '新港鄉', '民雄鄉', '大林鎮',\r\n '溪口鄉', '義竹鄉', '布袋鎮'],\r\n\r\n ['602', '603', '604', '605', '606', '607', '608', '611', '612',\r\n '613', '614', '615', '616', '621', '622', '623', '624', '625']\r\n ],\r\n // 雲林縣\r\n [\r\n ['斗南鎮', '大埤鄉', '虎尾鎮', '土庫鎮', '褒忠鄉', '東勢鄉', '臺西鄉', '崙背鄉',\r\n '麥寮鄉', '斗六市', '林內鄉', '古坑鄉', '莿桐鄉', '西螺鎮', '二崙鄉', '北港鎮',\r\n '水林鄉', '口湖鄉', '四湖鄉', '元長鄉'],\r\n\r\n ['630', '631', '632', '633', '634', '635', '636', '637', '638', '640', '643',\r\n '646', '647', '648', '649', '651', '652', '653', '654', '655']\r\n ],\r\n // 臺南市\r\n [\r\n ['中西區', '東區', '南區', '北區', '安平區', '安南區', '永康區', '歸仁區', '新化區',\r\n '左鎮區', '玉井區', '楠西區', '南化區', '仁德區', '關廟區', '龍崎區', '官田區',\r\n '麻豆區', '佳里區', '西港區', '七股區', '將軍區', '學甲區', '北門區', '新營區',\r\n '後壁區', '白河區', '東山區', '六甲區', '下營區', '柳營區', '鹽水區', '善化區',\r\n '大內區', '山上區', '新市區', '安定區'],\r\n\r\n ['700', '701', '702', '704', '708', '709', '710', '711', '712', '713', '714',\r\n '715', '716', '717', '718', '719', '720', '721', '722', '723', '724', '725',\r\n '726', '727', '730', '731', '732', '733', '734', '735', '736', '737', '741',\r\n '742', '743', '744', '745']\r\n ],\r\n // 高雄市\r\n [\r\n ['新興區', '前金區', '苓雅區', '鹽埕區', '鼓山區', '旗津區', '前鎮區', '三民區',\r\n '楠梓區', '小港區', '左營區', '仁武區', '大社區', '東沙群島', '南沙群島', '岡山區',\r\n '路竹區', '阿蓮區', '田寮區', '燕巢區', '橋頭區', '梓官區', '彌陀區', '永安區',\r\n '湖內區', '鳳山區', '大寮區', '林園區', '鳥松區', '大樹區', '旗山區', '美濃區',\r\n '六龜區', '內門區', '杉林區', '甲仙區', '桃源區', '那瑪夏區', '茂林區', '茄萣區'],\r\n\r\n ['800', '801', '802', '803', '804', '805', '806', '807', '811', '812', '813',\r\n '814', '815', '817', '819', '820', '821', '822', '823', '824', '825', '826', '827', '828',\r\n '829', '830', '831', '832', '833', '840', '842', '843', '844', '845', '846',\r\n '847', '848', '849', '851', '852']\r\n ],\r\n // 澎湖縣\r\n [\r\n ['馬公市', '西嶼鄉', '望安鄉', '七美鄉', '白沙鄉', '湖西鄉'],\r\n\r\n ['880', '881', '882', '883', '884', '885']\r\n ],\r\n // 金門縣\r\n [\r\n ['金沙鎮', '金湖鎮', '金寧鄉', '金城鎮', '烈嶼鄉', '烏坵鄉'],\r\n\r\n ['890', '891', '892', '893', '894', '896']\r\n ],\r\n // 屏東縣\r\n [\r\n ['屏東市', '三地門鄉', '霧台鄉', '瑪家鄉', '九如鄉', '里港鄉', '高樹鄉', '鹽埔鄉',\r\n '長治鄉', '麟洛鄉', '竹田鄉', '內埔鄉', '萬丹鄉', '潮州鎮', '泰武鄉', '來義鄉',\r\n '萬巒鄉', '崁頂鄉', '新埤鄉', '南州鄉', '林邊鄉', '東港鎮', '琉球鄉', '佳冬鄉',\r\n '新園鄉', '枋寮鄉', '枋山鄉', '春日鄉', '獅子鄉', '車城鄉', '牡丹鄉', '恆春鎮',\r\n '滿州鄉'],\r\n\r\n ['900', '901', '902', '903', '904', '905', '906', '907', '908', '909', '911',\r\n '912', '913', '920', '921', '922', '923', '924', '925', '926', '927', '928',\r\n '929', '931', '932', '940', '941', '942', '943', '944', '945', '946', '947']\r\n ],\r\n // 臺東縣\r\n [\r\n ['臺東市', '綠島鄉', '蘭嶼鄉', '延平鄉', '卑南鄉', '鹿野鄉', '關山鎮', '海端鄉',\r\n '池上鄉', '東河鄉', '成功鎮', '長濱鄉', '太麻里', '金峰鄉', '大武鄉', '達仁鄉'],\r\n\r\n ['950', '951', '952', '953', '954', '955', '956', '957', '958', '959', '961',\r\n '962', '963', '964', '965', '966']\r\n ],\r\n // 花蓮縣\r\n [\r\n ['花蓮市', '新城鄉', '秀林鄉', '吉安鄉', '壽豐鄉', '鳳林鎮', '光復鄉', '豐濱鄉',\r\n '瑞穗鄉', '萬榮鄉', '玉里鎮', '卓溪鄉', '富里鄉'],\r\n\r\n ['970', '971', '972', '973', '974', '975', '976', '977', '978', '979', '981',\r\n '982', '983']\r\n ],\r\n // 連江縣\r\n [\r\n ['南竿鄉', '北竿鄉', '莒光鄉', '東引鄉'],\r\n\r\n ['209', '210', '211', '212']\r\n ]\r\n ]\r\n};\r\n","'use strict';\r\n\r\n// --------------------\r\n// Module import\r\n// --------------------\r\nimport data from './data';\r\nimport handleOptions from './handle-options';\r\n\r\n\r\n// --------------------\r\n// Module export\r\n// --------------------\r\nexport default TwCitySelector; /* use rollup to build */\r\n// module.exports = TwCitySelector; /* use browserify to build */\r\n\r\n\r\n// --------------------\r\n// Constructor\r\n// --------------------\r\nfunction TwCitySelector() {\r\n\r\n\tthis.elRoleName = 'tw-city-selector';\r\n\r\n\t// Setting options\r\n\tvar optionsDefault = {\r\n\t\tel: null,\r\n\t\telCounty: null,\r\n\t\telDistrict: null,\r\n\t\telZipcode: null,\r\n\t\tselectedCounty: null, // 預設選擇的縣市名稱\r\n\t\tselectedDistrict: null, // 預設選擇的區域名稱\r\n\t\tonly: null, // {array} 限制顯示哪些縣市及區域\r\n // onlyCity: null, // {array} 限制顯示哪些縣市 @封存\r\n\t\tshowDistrict: true, // {boolean} 是否顯示區域欄位\r\n\t\tshowZipcode: false, // {boolean} 是否顯示郵遞區號欄位\r\n\t\tbootstrapStyle: false,\r\n\t\tcountyClassName: 'county',\r\n\t\tcountyFiledName: 'county',\r\n\t\tdistrictClassName: 'district',\r\n\t\tdistrictFieldName: 'district',\r\n\t\tzipcodeClassName: 'zipcode',\r\n\t\tzipcodeFieldName: 'zipcode'\r\n\t};\r\n\r\n var optionsCustom = arguments[0];\r\n\tvar optionsRequired = arguments.length ? ['el'] : null; // 設置必要參數,若無帶入任何參數則設不設置\r\n\tthis.options = handleOptions(optionsCustom, optionsRequired, optionsDefault);\r\n\r\n // Setup\r\n\telSetup.call(this);\r\n\r\n\t// return this;\r\n};\r\n\r\n\r\n// --------------------\r\n// Public Methods\r\n// --------------------\r\n// TwCitySelector.prototype.init = function() {\r\n// \treturn init.call(this);\r\n// };\r\n\r\nTwCitySelector.prototype.reset = function() {\r\n\treturn resetSelectors.call(this);\r\n};\r\n\r\n\r\n// --------------------\r\n// Private Methods\r\n// --------------------\r\nfunction elSetup() {\r\n // 有指定 element 的初始化\r\n\tif (this.options.el) {\r\n\t\tthis.el = getElement(this.options.el);\r\n\t\tthis.elCounty = getElement(this.options.elCounty, this.el);\r\n\t\tthis.elDistrict = getElement(this.options.elDistrict, this.el);\r\n\t\tthis.elZipcode = getElement(this.options.elZipcode, this.el);\r\n\r\n\t\treturn init.call(this);\r\n\t}\r\n\r\n\t// 無指定 element 的初始化,使用 role-attribute element 作為預設 elements\r\n\tvar els = document.querySelectorAll('[role='+ this.elRoleName +']');\r\n\tArray.prototype.forEach.call(els, function(el) {\r\n\t\tvar self = JSON.parse(JSON.stringify(this)); // clone object,因 object 為參考\r\n\r\n\t\t// 因可能同時使用兩種初始化方式,需重置設定\r\n\t\tself.el = el;\r\n\t\tself.elCounty = null;\r\n\t\tself.elDistrict = null;\r\n\t\tself.elZipcode = null;\r\n\r\n\t\t// 限制只顯示哪些縣市、區域\r\n\t\tself.options.only = el.getAttribute('data-only')\r\n\t\t\t? el.getAttribute('data-only').replace(/\\s/g, '').split(',') // 去除空白字元,轉陣列\r\n\t\t\t: null;\r\n\r\n // 限制顯示哪些縣市 @封存\r\n \t// self.options.onlyCity = el.getAttribute('data-only-city')\r\n\t\t// \t? el.getAttribute('data-only-city').replace(/\\s/g, '').split(',') // 去除空白字元,轉陣列\r\n\t\t// \t: null;\r\n\r\n\t\t// 預設選擇的縣市\r\n\t\tself.options.selectedCounty = el.getAttribute('data-selected-county') || el.getAttribute('data-selected-country'); // 拼字錯誤\r\n\r\n\t\t// 預設選擇的區域\r\n\t\tself.options.selectedDistrict = el.getAttribute('data-selected-district');\r\n\r\n // 是否使用 bootstrap 樣式\r\n\t\tself.options.bootstrapStyle = (el.getAttribute('data-bootstrap-style') != null);\r\n\r\n\t\t// 是否顯示區域\r\n\t\tself.options.showDistrict = (el.getAttribute('data-show-district') != null);\r\n\r\n // 是否顯示郵遞區號\r\n\t\tself.options.showZipcode = (el.getAttribute('data-show-zipcode') != null);\r\n\r\n\t\treturn init.call(self);\r\n\t}, this);\r\n\r\n return els;\r\n}\r\n\r\nfunction init() {\r\n\tsetElements.call(this);\r\n\r\n // 監聽選單動作\r\n\tlistenCountyChanged.call(this);\r\n\tlistenDistrictChanged.call(this);\r\n\r\n\t// 設定預設選定的縣市\r\n\tsetSelectedItem.call(this);\r\n\r\n\t// bootstrap 樣式套入\r\n\tif (this.options.bootstrapStyle) {\r\n\t\tsetBootstrapStyle.call(this);\r\n\t}\r\n\r\n\treturn this;\r\n}\r\n\r\nfunction getElement(el, parent) {\r\n if ( ! el)\r\n return null;\r\n if (parent)\r\n return parent.querySelector(el);\r\n\treturn document.querySelector(el);\r\n}\r\n\r\nfunction setElements() {\r\n\tvar fragment = document.createDocumentFragment();\r\n\r\n\t// 縣市選單\r\n\tif ( ! this.elCounty) {\r\n\t\tvar county = document.createElement('select');\r\n\t\tthis.elCounty = county;\r\n\t\tfragment.appendChild(county);\r\n\t}\r\n\r\n\t// 縣市選單屬性\r\n\tthis.elCounty.innerHTML = getCountyOptions.call(this);\r\n\tthis.elCounty.setAttribute('class', this.options.countyClassName);\r\n\tthis.elCounty.name = this.options.countyFiledName;\r\n\r\n\t// 區域選單\r\n\tif ( ! this.elDistrict) {\r\n\t\tvar district = document.createElement('select');\r\n\t\tthis.elDistrict = district;\r\n\t\tfragment.appendChild(district);\r\n\t}\r\n\r\n\t// 區域選單屬性\r\n\tif (!this.options.showDistrict) {\r\n\t\tthis.elDistrict.style.display = 'none';\r\n\t}\r\n\tthis.elDistrict.innerHTML = getDistrictOptions.call(this);\r\n\tthis.elDistrict.setAttribute('class', this.options.districtClassName);\r\n\tthis.elDistrict.name = this.options.districtFieldName;\r\n\r\n\t// 郵遞區號\r\n\tif ( ! this.elZipcode) {\r\n\t\tvar zipcode = document.createElement('input');\r\n\t\tthis.elZipcode = zipcode;\r\n\t\tfragment.appendChild(zipcode);\r\n\r\n // 郵遞區號屬性設定\r\n this.elZipcode.style.display = this.options.showZipcode || 'none';\r\n this.elZipcode.style.width = '6em';\r\n this.elZipcode.readOnly = true;\r\n this.elZipcode.type = 'text';\r\n this.elZipcode.placeholder = '郵遞區號';\r\n this.elZipcode.name = this.options.zipcodeFieldName;\r\n this.elZipcode.setAttribute('class', this.options.zipcodeClassName);\r\n this.elZipcode.autocomplete = 'off';\r\n\t}\r\n\r\n\t// element 片段塞入 el\r\n\tthis.el.appendChild(fragment);\r\n}\r\n\r\nfunction setCountyElement() {\r\n // 縣市選單\r\n\tif ( ! this.elCounty) {\r\n\t\tvar county = document.createElement('select');\r\n\t\tthis.elCounty = county;\r\n\t\tfragment.appendChild(county);\r\n\t}\r\n\r\n\t// 縣市選單屬性\r\n\tthis.elCounty.innerHTML = getCountyOptions.call(this);\r\n\tthis.elCounty.setAttribute('class', this.options.countyClassName);\r\n\tthis.elCounty.name = this.options.countyFiledName;\r\n}\r\n\r\nfunction getCountyOptions() {\r\n\tvar elOptions = '';\r\n var onlyItems = getCountyOnlyItems.call(this);\r\n\r\n\tfor (var i = 0, j = data.counties.length; i < j; i++) {\r\n\t\t// 若有設定限制顯示的縣市,且該項目不在自訂縣市中,則不顯示\r\n\t\tif (onlyItems && onlyItems.indexOf(data.counties[i]) === -1) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\r\n\t\t// format: \r\n\t\telOptions += ``;\r\n\t}\r\n\r\n\treturn elOptions;\r\n}\r\n\r\nfunction getDistrictOptions(index) {\r\n\tif ( ! index) return '';\r\n\r\n\tvar elOptions = '';\r\n var countyValue = this.elCounty.value;\r\n var onlyItems = getDistrictOnlyItems.call(this, countyValue);\r\n // console.log(onlyItems);\r\n\r\n\tfor(var i = 0, j = data.districts[index][0].length - 1; i <= j; i++) {\r\n // 若有設定限制顯示的區域,且該項目不在自訂區域中,則不顯示\r\n if (onlyItems && onlyItems.indexOf(data.districts[index][0][i]) === -1) {\r\n continue;\r\n }\r\n\r\n\t\t// format: \r\n\t\telOptions += ``;\r\n\t}\r\n\r\n\treturn elOptions;\r\n}\r\n\r\nfunction getCountyOnlyItems() {\r\n var onlyItems = this.options.only;\r\n if ( ! Array.isArray(onlyItems)) return null;\r\n\r\n // 取出縣市資料\r\n return onlyItems.map(function(item) {\r\n var index = item.indexOf('@');\r\n return index === -1 ? item : item.substring(0, index);\r\n });\r\n}\r\n\r\nfunction getDistrictOnlyItems(county) {\r\n var onlyItems = this.options.only;\r\n if ( ! Array.isArray(onlyItems)) return null;\r\n\r\n // 取出區域資料\r\n var items = null;\r\n onlyItems.forEach(function(item) {\r\n if (item.indexOf(county) === -1) return;\r\n\r\n var index = item.lastIndexOf('@');\r\n if (index !== -1) {\r\n return items = item.substring(index + 1).split('|'); // 轉陣列\r\n }\r\n });\r\n\r\n return items;\r\n}\r\n\r\nfunction listenCountyChanged() {\r\n\tvar handler = function() {\r\n\t\tvar index = this.elCounty.querySelector('option:checked').dataset.index;\r\n\t\tthis.elDistrict.innerHTML = getDistrictOptions.call(this, index);\r\n\t\tthis.elZipcode.value = '';\r\n\t}.bind(this);\r\n\r\n\tthis.elCounty.addEventListener('change', handler);\r\n}\r\n\r\nfunction listenDistrictChanged() {\r\n\tvar handler = function() {\r\n\t\tvar zipcode = this.elDistrict.querySelector('option:checked').dataset.zipcode || '';\r\n\t\tthis.elZipcode.value = zipcode;\r\n\t}.bind(this);\r\n\r\n\tthis.elDistrict.addEventListener('change', handler);\r\n}\r\n\r\nfunction setSelectedItem() {\r\n if (this.options.selectedCounty) {\r\n var event = document.createEvent('Event');\r\n \tevent.initEvent('change', true, true);\r\n\r\n \tthis.elCounty.value = this.options.selectedCounty;\r\n \tthis.elCounty.dispatchEvent(event);\r\n }\r\n\r\n\tif (this.options.selectedDistrict) {\r\n\t\tthis.elDistrict.value = this.options.selectedDistrict;\r\n\t\tthis.elDistrict.dispatchEvent(event);\r\n\t}\r\n}\r\n\r\nfunction resetSelectors() {\r\n\tthis.elCounty.selectedIndex = 0;\r\n\tthis.elDistrict.innerHTML = getDistrictOptions.call(this);\r\n\tthis.elZipcode.value = '';\r\n\r\n\treturn this;\r\n}\r\n\r\nfunction setBootstrapStyle() {\r\n\tvar fieldClassName = 'form-control';\r\n var wrapperClassName = 'form-group';\r\n\tvar fragment = document.createDocumentFragment();\r\n\r\n\tthis.elCounty.setAttribute('class', fieldClassName);\r\n\tthis.elDistrict.setAttribute('class', fieldClassName);\r\n\tthis.elZipcode.setAttribute('class', fieldClassName);\r\n\r\n var wrapper = document.createElement('div');\r\n wrapper.setAttribute('class', wrapperClassName);\r\n\r\n\tvar elCounty = wrapper.cloneNode();\r\n\telCounty.appendChild(this.elCounty);\r\n\tfragment.appendChild(elCounty);\r\n\r\n\tvar elDistrict = wrapper.cloneNode();\r\n\telDistrict.appendChild(this.elDistrict);\r\n\tfragment.appendChild(elDistrict);\r\n\r\n\tvar elZipcode = wrapper.cloneNode();\r\n\telZipcode.appendChild(this.elZipcode);\r\n\tfragment.appendChild(elZipcode);\r\n\r\n\tthis.el.appendChild(fragment);\r\n}\r\n","export default function handleOptions() {\r\n // Check options required\r\n if (arguments[1]) {\r\n getOptionsRequired(arguments[0], arguments[1]);\r\n }\r\n\r\n // Extend options\r\n return getOptionsExtend(arguments[0], arguments[2]);\r\n}\r\n\r\nfunction getOptionsRequired(optionsCustom, optionsRequired) {\r\n var error = '';\r\n var length = optionsRequired.length;\r\n optionsCustom = optionsCustom || {};\r\n\r\n while (length--) {\r\n if ( ! optionsCustom.hasOwnProperty(optionsRequired[length]))\r\n error += optionsRequired[length] + ',';\r\n }\r\n\r\n if (error) throw '缺少參數: ' + error;\r\n}\r\n\r\nfunction getOptionsExtend(optionsCustom, optionsDefault) {\r\n if ( ! optionsCustom) {\r\n return optionsDefault;\r\n }\r\n\r\n var property;\r\n for (property in optionsCustom) {\r\n optionsDefault[property] = optionsCustom[property];\r\n }\r\n\r\n if (optionsCustom['elCountry']) { // 拼字錯誤修正\r\n optionsDefault['elCounty'] = optionsCustom['elCountry'];\r\n }\r\n\r\n if (optionsCustom['selectedCountry']) { // 拼字錯誤修正\r\n optionsDefault['selectedCounty'] = optionsCustom['selectedCountry'];\r\n }\r\n\r\n if (optionsCustom['countryClassName']) { // 拼字錯誤修正\r\n optionsDefault['countyClassName'] = optionsCustom['countryClassName'];\r\n }\r\n\r\n if (optionsCustom['countryFiledName']) { // 拼字錯誤修正\r\n optionsDefault['countyFiledName'] = optionsCustom['countryFiledName'];\r\n }\r\n\r\n return optionsDefault;\r\n}\r\n"]}