{"version":3,"sources":["AX6UISelect.js"],"names":["_jqmin","require","_AX6UICore2","_AX6Info","_AX6Util","_AX6Mustache","ctrlKeys","18","8","17","46","40","35","187","27","36","45","37","189","34","33","13","39","16","9","38","91","display","columnKeys","select","optionGroup","options","optionValue","optionSelected","minWidth","optionText","pickerDim","_jqmin2","default","window","winWidth","$window","width","that","winHeight","Math","activeSelectOptionGroup","this","onStateChanged","call","state","pickerDirection","item","onChange","top","dim","height","alignSelectDisplay","i","queue","length","w","pos","positionMargin","$display","css","min-width","newTop","reset","find","line-height","alignSelectOptionGroup","append","left","document","$target","offset","outerWidth","outerHeight","max","body","activeSelectQueueIndex","clickEl","direction","gindex","index","addClass","close","onBodyKeyup","$option","undefined","labels","onBodyClick","isArray","selected","target","optgroup","getAttribute","get","val","id","syncLabel","trigger","queIdx","multiple","label","value","toLowerCase","_AX6Info2","eventKeys","ESC","e","sort","optionFocusIndex","push","optionsSort","attr","$select","getLabel","l","forEach","n","_focusIndex","_prevFocusIndex","focusOptionEl","lang","noSelected","data","render","multipleLabel","focusOptionElHeight","html","optionGroupScrollContainerHeight","focusWord","focusOptionElTop","indexedOptions","searchWord","optionGroupScrollContainer","optionGroupScrollContainerScrollTop","@findex","search","bindSelectTarget","a","b","focusMove","findex","selectEvent","optionSelectedIndex","optionItemLength","stopEvent","innerHeight","scrollTop","position","tabIndex","_this","$displayLabel","_AX6Util2","findParentNode","clear","open","which","SPACE","$displayInput","debounce","keyDown","DOWN","UP","blur","selectChange","elementOptions","newOptions","focusIndex","config","extend","option","setSelected","instanceId","name","po","theme","O","OIndex","OO","tmpl","bind","off","on","keyUp","text","click","syncSelectOptions","_this2","getQueIdx","isString","boundID","console","getError","OOIndex","loading","join","toArray","openTimer","keyUpTimer","init","log","AX6UISelect","_classCallCheck","_this3","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","animateTime","noOptions","isObject","closeTimer","waitOptionsCallback","xvar","initOnce","initialized","throttle","optionsMap","event","_O","getInstanceId","JSON","parse","stringify","error","isNumber","parseJson","selectedOptionEl","tryCount","setTimeout","_this5","self","focusTop","clearTimeout","onExpand","_item","waitOptions","_AX6Mustache2","getSelected","nn","processor","_this4","_OIndex","optionIndex","o","clearSelected","toString","arr","values","_this6","key","internal","onClose","_this7","removeAttr","remove"],"mappings":"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","file":"AX6UISelect.js","sourcesContent":["import jQuery from \"jqmin\";\nimport AX6UICore from \"./AX6UICore.js\";\nimport info from \"./AX6Info\";\nimport U from \"./AX6Util\";\nimport mustache from \"./AX6Mustache\";\n/* ~~~~~~~~~~~~~~~~~~ end of import  ~~~~~~~~~~~~~~~~~~~~ */\n\nlet ctrlKeys = {\n  \"18\": \"KEY_ALT\",\n  \"8\": \"KEY_BACKSPACE\",\n  \"17\": \"KEY_CONTROL\",\n  \"46\": \"KEY_DELETE\",\n  \"40\": \"KEY_DOWN\",\n  \"35\": \"KEY_END\",\n  \"187\": \"KEY_EQUAL\",\n  \"27\": \"KEY_ESC\",\n  \"36\": \"KEY_HOME\",\n  \"45\": \"KEY_INSERT\",\n  \"37\": \"KEY_LEFT\",\n  \"189\": \"KEY_MINUS\",\n  \"34\": \"KEY_PAGEDOWN\",\n  \"33\": \"KEY_PAGEUP\",\n  // \"190\": \"KEY_PERIOD\",\n  \"13\": \"KEY_RETURN\",\n  \"39\": \"KEY_RIGHT\",\n  \"16\": \"KEY_SHIFT\",\n  // \"32\": \"KEY_SPACE\",\n  \"9\": \"KEY_TAB\",\n  \"38\": \"KEY_UP\",\n  \"91\": \"KEY_WINDOW\"\n  //\"107\" : \"NUMPAD_ADD\",\n  //\"194\" : \"NUMPAD_COMMA\",\n  //\"110\" : \"NUMPAD_DECIMAL\",\n  //\"111\" : \"NUMPAD_DIVIDE\",\n  //\"12\" : \"NUMPAD_EQUAL\",\n  //\"106\" : \"NUMPAD_MULTIPLY\",\n  //\"109\" : \"NUMPAD_SUBTRACT\"\n};\nlet tmpl = {\n  \"display\"(columnKeys){\n    return `\n<a {{^tabIndex}}href=\"#ax6ui-select-{{id}}\" {{/tabIndex}}{{#tabIndex}}tabindex=\"{{tabIndex}}\" {{/tabIndex}}class=\"ax6ui-select-display {{theme}}\" \ndata-ax6ui-select-display=\"{{id}}\" data-ax6ui-select-instance=\"{{instanceId}}\" style=\"height: {{height}}px;\">\n    <div class=\"ax6ui-select-display-table\" data-els=\"display-table\">\n        <div data-ax6ui-select-display=\"label\">{{label}}</div>\n        <div data-ax6ui-select-display=\"addon\"> \n            {{#multiple}}{{#reset}}\n            <span class=\"addon-icon-reset\" data-selected-clear=\"true\">{{{.}}}</span>\n            {{/reset}}{{/multiple}}\n            {{#icons}}\n            <span class=\"addon-icon-closed\">{{clesed}}</span>\n            <span class=\"addon-icon-opened\">{{opened}}</span>\n            {{/icons}}\n            {{^icons}}\n            <span class=\"addon-icon-closed\"><span class=\"addon-icon-arrow\"></span></span>\n            <span class=\"addon-icon-opened\"><span class=\"addon-icon-arrow\"></span></span>\n            {{/icons}}\n        </div>\n    </div>\n    <input type=\"text\" tabindex=\"-1\" data-ax6ui-select-display=\"input\" \n    style=\"position:absolute;z-index:0;left:0px;top:0px;font-size:1px;opacity: 0;width:1px;height:1px;border: 0 none;color : transparent;text-indent: -9999em;\" />\n</a>\n`;\n  },\n  \"select\"(columnKeys){\n    return `\n<select tabindex=\"-1\" class=\"\" name=\"{{name}}\" {{#multiple}}multiple=\"multiple\"{{/multiple}} style=\"height: {{height}}px;\"></select>\n`;\n  },\n  \"optionGroup\"(columnKeys){\n    return `\n<div class=\"ax6ui-select-option-group {{theme}}\" data-ax6ui-select-option-group=\"{{id}}\">\n    <div class=\"ax-select-body\">\n        <div class=\"ax-select-option-group-content\" data-els=\"content\"></div>\n    </div>\n    <div class=\"ax-select-arrow\"></div> \n</div>\n`;\n  },\n  \"options\"(columnKeys){\n    return `\n{{#waitOptions}}\n    <div class=\"ax-select-option-item\">\n            <div class=\"ax-select-option-item-holder\">\n                <span class=\"ax-select-option-item-cell ax-select-option-item-label\">\n                    {{{lang.loading}}}\n                </span>\n            </div>\n        </div>\n{{/waitOptions}}\n{{^waitOptions}}\n    {{#options}}\n        {{#optgroup}}\n            <div class=\"ax-select-option-group\">\n                <div class=\"ax-select-option-item-holder\">\n                    <span class=\"ax-select-option-group-label\">\n                        {{{.}}}\n                    </span>\n                </div>\n                {{#options}}\n                <div class=\"ax-select-option-item\" data-option-focus-index=\"{{@findex}}\" data-option-group-index=\"{{@gindex}}\" data-option-index=\"{{@index}}\" \n                data-option-value=\"{{${columnKeys.optionValue}}}\" \n                {{#${columnKeys.optionSelected}}}data-option-selected=\"true\"{{/${columnKeys.optionSelected}}}>\n                    <div class=\"ax-select-option-item-holder\">\n                        {{#multiple}}\n                        <span class=\"ax-select-option-item-cell ax-select-option-item-checkbox\">\n                            <span class=\"item-checkbox-wrap useCheckBox\" data-option-checkbox-index=\"{{@i}}\"></span>\n                        </span>\n                        {{/multiple}}\n                        <span class=\"ax-select-option-item-cell ax-select-option-item-label\">{{{${columnKeys.optionText}}}}</span>\n                    </div>\n                </div>\n                {{/options}}\n            </div>                            \n        {{/optgroup}}\n        {{^optgroup}}\n        <div class=\"ax-select-option-item\" data-option-focus-index=\"{{@findex}}\" data-option-index=\"{{@index}}\" data-option-value=\"{{${columnKeys.optionValue}}}\" {{#${columnKeys.optionSelected}}}data-option-selected=\"true\"{{/${columnKeys.optionSelected}}}>\n            <div class=\"ax-select-option-item-holder\">\n                {{#multiple}}\n                <span class=\"ax-select-option-item-cell ax-select-option-item-checkbox\">\n                    <span class=\"item-checkbox-wrap useCheckBox\" data-option-checkbox-index=\"{{@i}}\"></span>\n                </span>\n                {{/multiple}}\n                <span class=\"ax-select-option-item-cell ax-select-option-item-label\">{{{${columnKeys.optionText}}}}</span>\n            </div>\n        </div>\n        {{/optgroup}}\n    {{/options}}\n    {{^options}}\n        <div class=\"ax-select-option-item\">\n            <div class=\"ax-select-option-item-holder\">\n                <span class=\"ax-select-option-item-cell ax-select-option-item-label\">\n                    {{{lang.noOptions}}}\n                </span>\n            </div>\n        </div>\n    {{/options}}\n{{/waitOptions}}\n`;\n  },\n};\n\nconst $window = jQuery(window);\nconst onStateChanged = function (item, that) {\n  if (item && item.onStateChanged) {\n    item.onStateChanged.call(that, that);\n  }\n  else if (this.onStateChanged) {\n    this.onStateChanged.call(that, that);\n  }\n\n  if (that.state == \"changeValue\") {\n    if (item && item.onChange) {\n      item.onChange.call(that, that);\n    }\n    else if (this.onChange) {\n      this.onChange.call(that, that);\n    }\n  }\n\n  item = null;\n  that = null;\n  return true;\n};\nconst alignSelectDisplay = function () {\n  let i = this.queue.length, w;\n  while (i--) {\n    if (this.queue[i].$display) {\n      w = Math.max(this.queue[i].$select.outerWidth(), U.number(this.queue[i].minWidth));\n      this.queue[i].$display.css({\n        \"min-width\": w\n      });\n      if (this.queue[i].reset) {\n        this.queue[i].$display.find(\".addon-icon-reset\").css({\n          \"line-height\": this.queue[i].$display.height() + \"px\"\n        });\n      }\n    }\n  }\n\n  i = null;\n  w = null;\n  return this;\n};\nconst alignSelectOptionGroup = function (append) {\n  if (!this.activeSelectOptionGroup) return this;\n\n  let item = this.queue[this.activeSelectQueueIndex],\n    pos = {}, positionMargin = 0,\n    dim = {}, pickerDim = {},\n    pickerDirection;\n\n  if (append) jQuery(document.body).append(this.activeSelectOptionGroup);\n\n  pos = item.$target.offset();\n  dim = {\n    width: item.$target.outerWidth(),\n    height: item.$target.outerHeight()\n  };\n  pickerDim = {\n    winWidth: Math.max($window.width(), jQuery(document.body).width()),\n    winHeight: Math.max($window.height(), jQuery(document.body).height()),\n    width: this.activeSelectOptionGroup.outerWidth(),\n    height: this.activeSelectOptionGroup.outerHeight()\n  };\n\n  // picker css(width, left, top) & direction 결정\n  if (!item.direction || item.direction === \"\" || item.direction === \"auto\") {\n    // set direction\n    pickerDirection = \"top\";\n\n    if (pos.top - pickerDim.height - positionMargin < 0) {\n      pickerDirection = \"top\";\n    } else if (pos.top + dim.height + pickerDim.height + positionMargin > pickerDim.winHeight) {\n      pickerDirection = \"bottom\";\n    }\n  } else {\n    pickerDirection = item.direction;\n  }\n  // todo : 표현할 공간이 없다면..\n  if (append) {\n    this.activeSelectOptionGroup\n      .addClass(\"direction-\" + pickerDirection);\n  }\n  this.activeSelectOptionGroup\n    .css((function () {\n      if (pickerDirection == \"top\") {\n        if (pos.top + dim.height + pickerDim.height + positionMargin > pickerDim.winHeight) {\n\n          var newTop = pos.top + dim.height / 2 - pickerDim.height / 2;\n          if (newTop + pickerDim.height + positionMargin > pickerDim.winHeight) {\n            newTop = 0;\n          }\n          if (newTop < 0) {\n            newTop = 0;\n          }\n\n          return {\n            left: pos.left,\n            top: newTop,\n            width: dim.width\n          }\n        }\n        return {\n          left: pos.left,\n          top: pos.top + dim.height + 1,\n          width: dim.width\n        }\n      }\n      else if (pickerDirection == \"bottom\") {\n        return {\n          left: pos.left,\n          top: pos.top - pickerDim.height - 1,\n          width: dim.width\n        }\n      }\n    }).call(this));\n};\nconst onBodyClick = function (e, target) {\n  if (!this.activeSelectOptionGroup) return this;\n\n  let item = this.queue[this.activeSelectQueueIndex],\n    clickEl = \"display\";\n\n  target = U.findParentNode(e.target, function (target) {\n    if (target.getAttribute(\"data-option-value\") || target.getAttribute(\"data-option-value\") == \"\") {\n      clickEl = \"optionItem\";\n      return true;\n    }\n    else if (item.$target.get(0) == target) {\n      clickEl = \"display\";\n      return true;\n    }\n  });\n\n  if (!target) {\n    this.close();\n    return this;\n  }\n  else if (clickEl === \"optionItem\") {\n    this.val(item.id, {\n      index: {\n        gindex: target.getAttribute(\"data-option-group-index\"),\n        index: target.getAttribute(\"data-option-index\")\n      }\n    }, undefined, \"internal\");\n    item.$select.trigger(\"change\");\n    item.$display.focus();\n    if (!item.multiple) this.close();\n  }\n  else {\n    //open and display click\n    //console.log(this.instanceId);\n  }\n\n  return this;\n};\nconst onBodyKeyup = function (e) {\n  if (e.keyCode == info.eventKeys.ESC) {\n    this.close();\n  }\n  else if (e.which == info.eventKeys.RETURN) {\n    if (this.queue[this.activeSelectQueueIndex].optionFocusIndex > -1) { // 아이템에 포커스가 활성화 된 후, 마우스 이벤트 이면 무시\n      let $option = this.activeSelectOptionGroup.find('[data-option-focus-index=\"' + this.queue[this.activeSelectQueueIndex].optionFocusIndex + '\"]');\n      this.val(this.queue[this.activeSelectQueueIndex].id, {\n        index: {\n          gindex: $option.attr(\"data-option-group-index\"),\n          index: $option.attr(\"data-option-index\")\n        }\n      }, undefined, \"internal\");\n      this.queue[this.activeSelectQueueIndex].$select.trigger(\"change\");\n      if (!this.queue[this.activeSelectQueueIndex].multiple) this.close();\n    } else {\n      this.close();\n    }\n  }\n};\nconst getLabel = function (queIdx) {\n  let item = this.queue[queIdx],\n    labels = [];\n\n  if (U.isArray(item.selected) && item.selected.length > 0) {\n    item.selected.forEach(function (n) {\n      if (n.selected) labels.push(n[item.columnKeys.optionText]);\n    });\n  }\n  else {\n    if (!item.multiple && item.options && item.options[0]) {\n      if (item.options[0].optgroup) {\n        labels[0] = item.options[0].options[0][item.columnKeys.optionText];\n      }\n      else {\n        labels[0] = item.options[0][item.columnKeys.optionText];\n      }\n    }\n    else {\n      labels[0] = item.lang.noSelected;\n    }\n  }\n\n  return (function () {\n    if (item.multiple && labels.length > 1) {\n      let data = {\n        label: labels[0],\n        length: labels.length - 1\n      };\n      return mustache.render(item.lang.multipleLabel, data);\n    }\n    else {\n      return labels[0];\n    }\n  })();\n};\nconst syncLabel = function (queIdx) {\n  this.queue[queIdx].$displayLabel\n    .html(getLabel.call(this, queIdx));\n};\nconst focusWord = function (queIdx, searchWord) {\n  let options = [], i = -1, l = this.queue[queIdx].indexedOptions.length - 1, n;\n  if (searchWord) {\n    while (l - i++) {\n      n = this.queue[queIdx].indexedOptions[i];\n      if (('' + n.value).toLowerCase() == searchWord.toLowerCase()) {\n        options = [{'@findex': n['@findex'], optionsSort: 0}];\n        break;\n      } else {\n        let sort = ('' + n.value).toLowerCase().search(searchWord.toLowerCase());\n        if (sort > -1) {\n          options.push({'@findex': n['@findex'], optionsSort: sort});\n          if (options.length > 2) break;\n        }\n        sort = null;\n      }\n    }\n    options.sort(function (a, b) {\n      return a.optionsSort - b.optionsSort;\n    });\n  }\n  if (options && options.length > 0) {\n    focusMove.call(this, queIdx, undefined, options[0]['@findex']);\n  }\n\n  try {\n    return options;\n  }\n  finally {\n    options = null;\n    i = null;\n    l = null;\n    n = null;\n  }\n};\nconst focusMove = function (queIdx, direction, findex) {\n  let _focusIndex,\n    _prevFocusIndex,\n    focusOptionEl,\n    optionGroupScrollContainer;\n\n  if (this.activeSelectOptionGroup && this.queue[queIdx].options && this.queue[queIdx].options.length > 0) {\n\n    if (typeof findex !== \"undefined\") {\n      _focusIndex = findex\n    }\n    else {\n      _prevFocusIndex = (this.queue[queIdx].optionFocusIndex == -1) ? this.queue[queIdx].optionSelectedIndex || -1 : this.queue[queIdx].optionFocusIndex;\n      if (_prevFocusIndex == -1) {\n        _focusIndex = (direction > 0) ? 0 : this.queue[queIdx].optionItemLength - 1;\n      }\n      else {\n        _focusIndex = _prevFocusIndex + direction;\n        if (_focusIndex < 0) _focusIndex = 0;\n        else if (_focusIndex > this.queue[queIdx].optionItemLength - 1) _focusIndex = this.queue[queIdx].optionItemLength - 1;\n      }\n    }\n\n    this.queue[queIdx].optionFocusIndex = _focusIndex;\n\n    this.activeSelectOptionGroup\n      .find('[data-option-focus-index]')\n      .removeClass(\"hover\");\n\n    focusOptionEl = this.activeSelectOptionGroup\n      .find('[data-option-focus-index=\"' + _focusIndex + '\"]')\n      .addClass(\"hover\");\n\n    optionGroupScrollContainer = this.activeSelectOptionGroup.find('[data-els=\"content\"]');\n\n    let focusOptionElHeight = focusOptionEl.outerHeight(),\n      optionGroupScrollContainerHeight = optionGroupScrollContainer.innerHeight(),\n      optionGroupScrollContainerScrollTop = optionGroupScrollContainer.scrollTop(),\n      focusOptionElTop = focusOptionEl.position().top + optionGroupScrollContainer.scrollTop();\n\n    if (optionGroupScrollContainerHeight + optionGroupScrollContainerScrollTop < focusOptionElTop + focusOptionElHeight) {\n      optionGroupScrollContainer.scrollTop(focusOptionElTop + focusOptionElHeight - optionGroupScrollContainerHeight);\n    }\n    else if (optionGroupScrollContainerScrollTop > focusOptionElTop) {\n      optionGroupScrollContainer.scrollTop(focusOptionElTop);\n    }\n    // optionGroup scroll check\n  }\n};\nconst bindSelectTarget = function (queIdx) {\n  const selectEvent = {\n    'click': function (queIdx, e) {\n      let target = U.findParentNode(e.target, function (target) {\n        if (target.getAttribute(\"data-selected-clear\")) {\n          //clickEl = \"clear\";\n          return true;\n        }\n      });\n\n      if (target) {\n        this.val(queIdx, {clear: true});\n      }\n      else {\n        if (this.activeSelectQueueIndex == queIdx) {\n          if (this.queue[queIdx].optionFocusIndex == -1) { // 아이템에 포커스가 활성화 된 후, 마우스 이벤트 이면 무시\n            this.close();\n          }\n        }\n        else {\n          this.open(queIdx);\n          U.stopEvent(e);\n        }\n      }\n    },\n    'keyUp': function (queIdx, e) {\n      if (e.which == info.eventKeys.SPACE) {\n        selectEvent.click.call(this, queIdx, e);\n      }\n      else if (!ctrlKeys[e.which]) {\n        // 사용자 입력이 뜸해지면 찾고 검색 값 제거...\n        U.debounce(function (searchWord, queIdx) {\n          focusWord.call(this, queIdx, searchWord);\n          this.queue[queIdx].$displayInput.val('');\n        }, 300).call(this, this.queue[queIdx].$displayInput.val(), queIdx);\n      }\n    },\n    'keyDown': function (queIdx, e) {\n      if (e.which == info.eventKeys.DOWN) {\n        focusMove.call(this, queIdx, 1);\n        U.stopEvent(e);\n      }\n      else if (e.which == info.eventKeys.UP) {\n        focusMove.call(this, queIdx, -1);\n        U.stopEvent(e);\n      }\n    },\n    'blur': function (queIdx, e) {\n\n    },\n    'selectChange': function (queIdx, e) {\n      this.val(queIdx, this.queue[queIdx].$select.val(), true);\n    }\n  };\n\n  let item = this.queue[queIdx], data = {};\n\n  // find selected\n  item.selected = [];\n  if (!item.options) item.options = [];\n  item.options.forEach((n) => {\n    if (n[this.config.columnKeys.optionSelected]) item.selected.push(jQuery.extend({}, n));\n  });\n\n  if (!item.$display) {\n    /// 템플릿에 전달할 오브젝트 선언\n    data.instanceId = this.instanceId;\n    data.id = item.id;\n    data.name = item.name;\n    data.theme = item.theme;\n    data.tabIndex = item.tabIndex;\n    data.multiple = item.multiple;\n    data.reset = item.reset;\n    data.height = item.height;\n    data.label = getLabel.call(this, queIdx);\n\n    item.$display = jQuery(mustache.render(tmpl.display.call(this), data));\n    //item.$display.css({height: item.height});\n    item.$displayLabel = item.$display.find('[data-ax6ui-select-display=\"label\"]');\n\n    if (item.$target.find(\"select\").get(0)) {\n      item.$select = item.$target.find(\"select\");\n      // select 속성만 변경\n      item.$select\n        .attr(\"tabindex\", \"-1\")\n        .css({height: data.height});\n\n      if (data.name) {\n        item.$select.attr(\"name\", \"name\");\n      }\n      if (data.multiple) {\n        item.$select.attr(\"multiple\", \"multiple\");\n      }\n    }\n    else {\n      item.$select = jQuery(mustache.render(tmpl.select.call(this), data));\n      item.$target.append(item.$select);\n      // select append\n    }\n\n    item.$target.append(item.$display);\n    item.$displayInput = item.$display.find('[data-ax6ui-select-display=\"input\"]'); // 사용자 입력값을 받기위한 숨음 입력필드\n    item.options = syncSelectOptions.call(this, queIdx, item.options);\n\n    alignSelectDisplay.call(this);\n\n    item.$displayInput\n      .off(\"blur.ax6ui-select\")\n      .on(\"blur.ax6ui-select\", selectEvent.blur.bind(this, queIdx))\n      .off('keyup.ax6ui-select')\n      .on('keyup.ax6ui-select', selectEvent.keyUp.bind(this, queIdx))\n      .off(\"keydown.ax6ui-select\")\n      .on(\"keydown.ax6ui-select\", selectEvent.keyDown.bind(this, queIdx));\n  }\n  else {\n    item.$displayLabel\n      .html(getLabel.call(this, queIdx));\n    item.options = syncSelectOptions.call(this, queIdx, item.options);\n\n    alignSelectDisplay.call(this);\n  }\n\n  item.$display\n    .off('click.ax6ui-select')\n    .on('click.ax6ui-select', selectEvent.click.bind(this, queIdx))\n    .off('keyup.ax6ui-select')\n    .on('keyup.ax6ui-select', selectEvent.keyUp.bind(this, queIdx));\n\n  // select 태그에 대한 change 이벤트 감시\n  item.$select\n    .off('change.ax6ui-select')\n    .on('change.ax6ui-select', selectEvent.selectChange.bind(this, queIdx));\n\n  data = null;\n  item = null;\n  queIdx = null;\n  return this;\n};\nconst syncSelectOptions = function (queIdx, options) {\n  const setSelected = function (queIdx, O) {\n    if (!O) {\n      this.queue[queIdx].selected = [];\n    }\n    else {\n      if (this.queue[queIdx].multiple) this.queue[queIdx].selected.push(jQuery.extend({}, O));\n      else this.queue[queIdx].selected[0] = jQuery.extend({}, O);\n    }\n  };\n\n  let item = this.queue[queIdx],\n    po, elementOptions, newOptions, focusIndex = 0;\n\n  setSelected.call(this, queIdx, false); // item.selected 초기화\n\n  if (options) {\n    item.options = options;\n    item.indexedOptions = [];\n\n    // select options 태그 생성\n    po = [];\n    item.options.forEach((O, OIndex) => {\n      if (O.optgroup) {\n\n        O['@gindex'] = OIndex;\n        O.options.forEach((OO, OOIndex) => {\n          OO['@index'] = OOIndex;\n          OO['@findex'] = focusIndex;\n          po.push('<option value=\"' + OO[item.columnKeys.optionValue] + '\" '\n            + (OO[item.columnKeys.optionSelected] ? ' selected=\"selected\"' : '') + '>'\n            + OO[item.columnKeys.optionText] + '</option>');\n          if (OO[item.columnKeys.optionSelected]) {\n            setSelected.call(this, queIdx, OO);\n          }\n\n          item.indexedOptions.push({\n            '@findex': focusIndex, value: OO[item.columnKeys.optionValue], text: OO[item.columnKeys.optionText]\n          });\n          focusIndex++;\n        });\n      }\n      else {\n        O['@index'] = OIndex;\n        O['@findex'] = focusIndex;\n        po.push('<option value=\"' + O[item.columnKeys.optionValue] + '\" '\n          + (O[item.columnKeys.optionSelected] ? ' selected=\"selected\"' : '') + '>'\n          + O[item.columnKeys.optionText] + '</option>');\n        if (O[item.columnKeys.optionSelected]) {\n          setSelected.call(this, queIdx, O);\n        }\n\n        item.indexedOptions.push({\n          '@findex': focusIndex, value: O[item.columnKeys.optionValue], text: O[item.columnKeys.optionText]\n        });\n        focusIndex++;\n      }\n    });\n    item.optionItemLength = focusIndex;\n    item.$select.html(po.join(''));\n  }\n  else {\n    /// select > options 태그로 스크립트 options를 만들어주는 역할\n    elementOptions = U.toArray(item.$select.get(0).options);\n    // select option 스크립트 생성\n    newOptions = [];\n    elementOptions.forEach((O, OIndex) => {\n      let option = {};\n\n      option[item.columnKeys.optionValue] = O.value;\n      option[item.columnKeys.optionText] = O.text;\n      option[item.columnKeys.optionSelected] = O.selected;\n      option['@index'] = OIndex;\n      option['@findex'] = OIndex;\n      if (O.selected) setSelected.call(this, queIdx, option);\n      newOptions.push(option);\n\n      option = null;\n    });\n    item.options = newOptions;\n    item.indexedOptions = newOptions;\n  }\n\n  if (!item.multiple && item.selected.length == 0 && item.options && item.options[0]) {\n    if (item.options[0].optgroup) {\n      item.options[0].options[0][item.columnKeys.optionSelected] = true;\n      item.selected.push(jQuery.extend({}, item.options[0].options[0]));\n    }\n    else {\n      item.options[0][item.columnKeys.optionSelected] = true;\n      item.selected.push(jQuery.extend({}, item.options[0]));\n    }\n  }\n\n  po = null;\n  elementOptions = null;\n  newOptions = null;\n  return item.options;\n};\nconst getQueIdx = function (boundID) {\n  if (!U.isString(boundID)) {\n    boundID = jQuery(boundID).data(\"data-ax6ui-select-id\");\n  }\n  if (!U.isString(boundID)) {\n    console.log(info.getError(\"ax6ui-select\", \"402\", \"getQueIdx\"));\n    return;\n  }\n  return U.search(this.queue, function () {\n    return this.id == boundID;\n  });\n};\n/* ~~~~~~~~~~~~~~~~~~ end of private  ~~~~~~~~~~~~~~~~~~~~ */\n\n/**\n * @class\n */\nclass AX6UISelect extends AX6UICore {\n  /**\n   * @constructor\n   * @param config\n   */\n  constructor(config) {\n    super();\n\n    /**\n     * @member {JSON}\n     * @param config\n     * @param [config.theme='default']\n     * @param [config.animateTime=100]\n     * @param [config.height=34]\n     * @param [config.lang] - 메세지들\n     * @param [config.lang.noSelected='']\n     * @param [config.lang.noOptions='no options']\n     * @param [config.lang.loading='now loading..']\n     * @param [config.lang.multipleLabel='\"{{label}}\"외 {{length}}건']\n     * @param [config.columnKeys] - 내부에서 사용 JSON key 정의\n     * @param [config.columnKeys.optionValue='value']\n     * @param [config.columnKeys.optionText='text']\n     * @param [config.columnKeys.optionSelected='selected']\n     */\n    this.config = {\n      theme: 'default',\n      animateTime: 100,\n      height: 34,\n      lang: {\n        noSelected: '',\n        noOptions: 'no options',\n        loading: 'now loading..',\n        multipleLabel: '\"{{label}}\"외 {{length}}건'\n      },\n      columnKeys: {\n        optionValue: 'value',\n        optionText: 'text',\n        optionSelected: 'selected'\n      }\n    };\n    jQuery.extend(true, this.config, config);\n\n    // 멤버 변수 초기화\n    /**\n     * bind를 통해 연결된 select가 저장되는 변수\n     * @member {Array}\n     */\n    this.queue = [];\n    /**\n     * @member {Object}\n     */\n    this.activeSelectOptionGroup = null;\n    /**\n     * @member {Number}\n     */\n    this.activeSelectQueueIndex = -1;\n    /**\n     * @member {Object}\n     */\n    this.openTimer = null;\n    /**\n     * @member {Object}\n     */\n    this.closeTimer = null;\n    /**\n     * @member {Function}\n     */\n    this.waitOptionsCallback = null;\n    /**\n     * @member {Object}\n     */\n    this.keyUpTimer = null;\n    /**\n     * @member {Object}\n     */\n    this.xvar = {};\n\n    this.init();\n  }\n\n  /**\n   * @method\n   * @param config\n   */\n  init() {\n    this.onStateChanged = this.config.onStateChanged;\n    delete this.config.onStateChanged;\n    this.onChange = this.config.onChange;\n    delete this.config.onChange;\n\n    // init 호출 여부\n    this.initOnce();\n  }\n\n  /**\n   * @method\n   */\n  initOnce() {\n    if (this.initialized) return this;\n    this.initialized = true;\n\n    // throttledResize\n    $window.on(\"resize.ax6ui-select-display-\" + this.instanceId, U.throttle(function (e) {\n      alignSelectDisplay.call(this, e || window.event);\n      alignSelectOptionGroup.call(this);\n    }, 100).bind(this));\n  }\n\n  /**\n   * @method\n   * @param item\n   * @return {AX6UISelect}\n   */\n  bind(item) {\n    let queIdx;\n    item = jQuery.extend(true, {}, this.config, item);\n\n    if (!item.target) {\n      console.log(info.getError(\"ax6ui-select\", \"401\", \"bind\"));\n      return this;\n    }\n    item.$target = jQuery(item.target);\n\n    if (!item.id) item.id = item.$target.data(\"data-ax6ui-select-id\");\n    if (!item.id) {\n      item.id = 'ax6ui-select-' + AX6UICore.getInstanceId();\n      item.$target.data(\"data-ax6ui-select-id\", item.id);\n    }\n    item.name = item.$target.attr(\"data-ax6ui-select\");\n\n    if (item.options) {\n      item.options = JSON.parse(JSON.stringify(item.options));\n    }\n\n    // target attribute data\n    (function (data) {\n      if (U.isObject(data) && !data.error) {\n        item = jQuery.extend(true, item, data);\n      }\n    })(U.parseJson(item.$target.attr(\"data-ax6ui-select-config\"), true));\n\n    queIdx = U.search(this.queue, function () {\n      return this.id == item.id;\n    });\n\n    if (queIdx === -1) {\n      this.queue.push(item);\n      bindSelectTarget.call(this, this.queue.length - 1);\n    }\n    else {\n      this.queue[queIdx].selected = [];\n      this.queue[queIdx].options = item.options;\n      this.queue[queIdx] = jQuery.extend(true, {}, this.queue[queIdx], item);\n      bindSelectTarget.call(this, queIdx);\n    }\n\n    queIdx = null;\n    return this;\n  };\n\n  /**\n   * @method\n   * @param boundID\n   * @param tryCount\n   * @return {AX6UISelect}\n   */\n  open(boundID, tryCount) {\n    const onExpand = function (item) {\n      item.onExpand.call({\n        self: this,\n        item: item\n      }, O => {\n        if (this.waitOptionsCallback) {\n          let data = {};\n          let item = this.queue[this.activeSelectQueueIndex];\n\n          /// 현재 selected 검증후 처리\n          (function (item, O) {\n            let optionsMap = {};\n            O.options.forEach((_O, _OIndex) => {\n              _O[\"@index\"] = _OIndex;\n              optionsMap[_O[item.columnKeys.optionValue]] = _O;\n            });\n            if (U.isArray(item.selected)) {\n              item.selected.forEach((_O) => {\n                if (optionsMap[_O[item.columnKeys.optionValue]]) {\n                  O.options[optionsMap[_O[item.columnKeys.optionValue]][\"@index\"]][item.columnKeys.optionSelected] = true;\n                }\n              });\n            }\n          })(item, O);\n\n\n          item.$displayLabel\n            .html(getLabel.call(this, this.activeSelectQueueIndex));\n          item.options = syncSelectOptions.call(this, this.activeSelectQueueIndex, O.options);\n\n          alignSelectDisplay.call(this);\n\n          /// 템플릿에 전달할 오브젝트 선언\n          data.id = item.id;\n          data.theme = item.theme;\n          data.multiple = item.multiple;\n          data.lang = item.lang;\n          data.options = item.options;\n          this.activeSelectOptionGroup.find('[data-els=\"content\"]').html(mustache.render(tmpl.options.call(this, item.columnKeys), data));\n        }\n      });\n    };\n    this.waitOptionsCallback = null;\n\n    /**\n     * open select from the outside\n     */\n    let queIdx = (U.isNumber(boundID)) ? boundID : getQueIdx.call(this, boundID),\n      item = this.queue[queIdx],\n      data = {}, focusTop, selectedOptionEl;\n\n    if (item.$display.attr(\"disabled\")) return this;\n\n    if (this.openTimer) clearTimeout(this.openTimer);\n    if (this.activeSelectOptionGroup) {\n      if (this.activeSelectQueueIndex == queIdx) {\n        return this;\n      }\n\n      if (tryCount > 2) return this;\n      this.close();\n      this.openTimer = setTimeout((function () {\n        this.open(queIdx, (tryCount || 0) + 1);\n      }).bind(this), this.config.animateTime);\n\n      return this;\n    }\n\n    item.optionFocusIndex = -1; // optionGroup이 열리면 포커스 인덱스 초기화 -1로\n    if (item.selected && item.selected.length > 0) {\n      item.optionSelectedIndex = item.selected[0][\"@findex\"];\n    }\n\n    /// 템플릿에 전달할 오브젝트 선언\n    data.id = item.id;\n    data.theme = item.theme;\n    data.multiple = item.multiple;\n\n    data.lang = item.lang;\n    item.$display.attr(\"data-select-option-group-opened\", \"true\");\n\n    if (item.onExpand) {\n      // onExpand 인 경우 UI 대기모드 추가\n      data.waitOptions = true;\n    }\n\n    data.options = item.options;\n    this.activeSelectOptionGroup = jQuery(mustache.render(tmpl.optionGroup.call(this), data));\n    this.activeSelectOptionGroup.find('[data-els=\"content\"]').html(mustache.render(tmpl.options.call(this, item.columnKeys), data));\n    this.activeSelectQueueIndex = queIdx;\n\n    alignSelectOptionGroup.call(this, \"append\"); // alignSelectOptionGroup 에서 body append\n\n    /// 사용자 입력으로 옵션을 검색하기 위한 시나리오\n    // 옵션그룹이 활성화 되면 사용자 입력을 받기위한 input 값 초기화 및 포커스 다른 select가 닫히면서 display focus 이벤트와 충돌하는 문제가 있으므로\n    // 1밀리세컨 지연후 포커스 처리. input에 포커스가 되므로 input value로 options를 검색 할 수 있게 됩니다.\n    item.$displayInput.val('');\n\n    setTimeout(() => {\n\n      if (item.selected && item.selected.length > 0) {\n        selectedOptionEl = this.activeSelectOptionGroup.find('[data-option-index=\"' + item.selected[0][\"@index\"] + '\"]');\n        if (selectedOptionEl.get(0)) {\n          focusTop = selectedOptionEl.position().top - this.activeSelectOptionGroup.height() / 3;\n          this.activeSelectOptionGroup.find('[data-els=\"content\"]').scrollTop(focusTop);\n        }\n      }\n\n      item.$displayInput.trigger(\"focus\");\n\n      jQuery(window).on(\"keyup.ax6ui-select-\" + this.instanceId, (function (e) {\n        e = e || window.event;\n        onBodyKeyup.call(this, e);\n        U.stopEvent(e);\n      }).bind(this));\n\n      jQuery(window).on(\"click.ax6ui-select-\" + this.instanceId, (function (e) {\n        e = e || window.event;\n        onBodyClick.call(this, e);\n        U.stopEvent(e);\n      }).bind(this));\n\n    }, this.config.animateTime);\n\n    onStateChanged.call(this, item, {\n      self: this,\n      state: \"open\",\n      item: item\n    });\n\n    // waitOption timer\n    if (item.onExpand) {\n      this.waitOptionsCallback = true;\n      onExpand.call(this, item);\n    }\n\n    data = null;\n    focusTop = null;\n    selectedOptionEl = null;\n    return this;\n  }\n\n  /**\n   * @method\n   * @param _item\n   * @return {AX6UISelect}\n   */\n  update(_item) {\n    this.bind(_item);\n    return this;\n  };\n\n  /**\n   * @method\n   * @param boundID\n   * @param options\n   * @return {AX6UISelect}\n   */\n  setOptions(boundID, options) {\n    let queIdx = getQueIdx.call(this, boundID);\n    this.queue[queIdx].selected = [];\n    this.queue[queIdx].options = options;\n    bindSelectTarget.call(this, queIdx);\n    return this;\n  }\n\n  /**\n   * @method\n   * @param boundID\n   * @param value\n   * @param selected\n   * @param internal\n   * @return {*}\n   */\n  val(boundID, value, selected, internal) {\n    const getSelected = function (_item, o, selected) {\n        if (typeof selected === \"undefined\") {\n          return (_item.multiple) ? !o : true;\n        } else {\n          return selected;\n        }\n      },\n      clearSelected = function (queIdx) {\n        this.queue[queIdx].options.forEach(n => {\n          if (n.optgroup) {\n            n.options.forEach(nn => {\n              nn.selected = false;\n            });\n          }\n          else {\n            n.selected = false;\n          }\n        });\n      },\n      processor = {\n        'index': function (queIdx, value, selected) {\n          // 클래스 내부에서 호출된 형태, 그런 이유로 옵션그룹에 대한 상태를 변경 하고 있다.\n          let item = this.queue[queIdx];\n\n          if (U.isString(value.index.gindex)) {\n            item.options[value.index.gindex].options[value.index.index][item.columnKeys.optionSelected] = getSelected(item, item.options[value.index.gindex].options[value.index.index][item.columnKeys.optionSelected], selected);\n            this.activeSelectOptionGroup\n              .find('[data-option-group-index=\"' + value.index.gindex + '\"][data-option-index=\"' + value.index.index + '\"]')\n              .attr(\"data-option-selected\", item.options[value.index.gindex].options[value.index.index][item.columnKeys.optionSelected].toString());\n          }\n          else {\n            item.options[value.index.index][item.columnKeys.optionSelected] = getSelected(item, item.options[value.index.index][item.columnKeys.optionSelected], selected);\n            this.activeSelectOptionGroup\n              .find('[data-option-index=\"' + value.index.index + '\"]')\n              .attr(\"data-option-selected\", item.options[value.index.index][item.columnKeys.optionSelected].toString());\n\n          }\n\n          syncSelectOptions.call(this, queIdx, item.options);\n          syncLabel.call(this, queIdx);\n          alignSelectOptionGroup.call(this);\n        },\n        'arr': function (queIdx, values, selected) {\n          values.forEach(value => {\n            if (U.isString(value) || U.isNumber(value)) {\n              processor.value.call(this, queIdx, value, selected);\n            }\n            else {\n              for (let key in processor) {\n                if (value[key]) {\n                  processor[key].call(this, queIdx, value, selected);\n                  break;\n                }\n              }\n            }\n          });\n        },\n        'value': function (queIdx, value, selected) {\n          let item = this.queue[queIdx],\n            optionIndex = U.search(item.options, function () {\n              return this[item.columnKeys.optionValue] == value;\n            });\n          if (optionIndex > -1) {\n            item.options[optionIndex][item.columnKeys.optionSelected] = getSelected(item, item.options[optionIndex][item.columnKeys.optionSelected], selected);\n          }\n          else {\n            console.log(info.getError(\"ax6ui-select\", \"501\", \"val\"));\n            return;\n          }\n\n          syncSelectOptions.call(this, queIdx, item.options);\n          syncLabel.call(this, queIdx);\n        },\n        'text': function (queIdx, value, selected) {\n          let item = this.queue[queIdx],\n            optionIndex = U.search(item.options, function () {\n              return this[item.columnKeys.optionText] == value;\n            });\n          if (optionIndex > -1) {\n            item.options[optionIndex][item.columnKeys.optionSelected] = getSelected(item, item.options[optionIndex][item.columnKeys.optionSelected], selected);\n          }\n          else {\n            console.log(info.getError(\"ax6ui-select\", \"501\", \"val\"));\n            return;\n          }\n\n          syncSelectOptions.call(this, queIdx, item.options);\n          syncLabel.call(this, queIdx);\n        },\n        'clear': function (queIdx) {\n          clearSelected.call(this, queIdx);\n          syncSelectOptions.call(this, queIdx, this.queue[queIdx].options);\n          syncLabel.call(this, queIdx);\n\n          if (this.activeSelectOptionGroup) {\n            this.activeSelectOptionGroup\n              .find('[data-option-index]')\n              .attr(\"data-option-selected\", \"false\");\n          }\n        }\n      };\n\n    let queIdx = (U.isNumber(boundID)) ? boundID : getQueIdx.call(this, boundID);\n    if (!this.queue[queIdx]) {\n      return this;\n    }\n    if (typeof value !== \"undefined\" && !this.queue[queIdx].multiple) {\n      clearSelected.call(this, queIdx);\n    }\n\n    if (typeof value == \"undefined\") {\n      return this.queue[queIdx].selected;\n    }\n    else if (U.isArray(value)) {\n      processor.arr.call(this, queIdx, value, selected);\n    }\n    else if (U.isString(value) || U.isNumber(value)) {\n      processor.value.call(this, queIdx, value, selected);\n    }\n    else {\n      if (value === null) {\n        processor.clear.call(this, queIdx);\n      }\n      else {\n        for (var key in processor) {\n          if (value[key]) {\n            processor[key].call(this, queIdx, value, selected);\n            break;\n          }\n        }\n      }\n    }\n\n    if (typeof value !== \"undefined\") {\n      onStateChanged.call(this, this.queue[queIdx], {\n        self: this,\n        item: this.queue[queIdx],\n        state: (internal) ? \"changeValue\" : \"setValue\",\n        value: this.queue[queIdx].selected,\n        internal: internal\n      });\n    }\n\n    boundID = null;\n    return this;\n  }\n\n  /**\n   * @method\n   * @param item\n   * @return {AX6UISelect}\n   */\n  close(item) {\n    if (this.closeTimer) clearTimeout(this.closeTimer);\n    if (!this.activeSelectOptionGroup) return this;\n\n    item = this.queue[this.activeSelectQueueIndex];\n    item.optionFocusIndex = -1;\n\n    item.$displayInput.val('').trigger(\"blur\");\n    item.$display.removeAttr(\"data-select-option-group-opened\").trigger(\"focus\");\n\n    this.activeSelectOptionGroup.addClass(\"destroy\");\n\n    jQuery(window)\n      .off(\"resize.ax6ui-select-\" + this.instanceId)\n      .off(\"click.ax6ui-select-\" + this.instanceId)\n      .off(\"keyup.ax6ui-select-\" + this.instanceId);\n\n    this.closeTimer = setTimeout(() => {\n      if (this.activeSelectOptionGroup) this.activeSelectOptionGroup.remove();\n      this.activeSelectOptionGroup = null;\n      this.activeSelectQueueIndex = -1;\n\n      let that = {\n        self: this,\n        item: item,\n        value: item.selected,\n        state: \"close\"\n      };\n\n      onStateChanged.call(this, item, that);\n\n      // waitOption timer\n      if (item.onClose) {\n        item.onClose.call(that);\n      }\n\n    }, this.config.animateTime);\n    this.waitOptionsCallback = null;\n    return this;\n  };\n\n  /**\n   * @method\n   * @param boundID\n   * @return {AX6UISelect}\n   */\n  enable(boundID) {\n    let queIdx = getQueIdx.call(this, boundID);\n    this.queue[queIdx].$display.removeAttr(\"disabled\");\n    this.queue[queIdx].$select.removeAttr(\"disabled\");\n\n    onStateChanged.call(this, this.queue[queIdx], {\n      self: this,\n      state: \"enable\"\n    });\n\n    return this;\n  };\n\n  /**\n   * @method\n   * @param boundID\n   * @return {AX6UISelect}\n   */\n  disable(boundID) {\n    let queIdx = getQueIdx.call(this, boundID);\n    this.queue[queIdx].$display.attr(\"disabled\", \"disabled\");\n    this.queue[queIdx].$select.attr(\"disabled\", \"disabled\");\n\n    onStateChanged.call(this, this.queue[queIdx], {\n      self: this,\n      state: \"disable\"\n    });\n\n    return this;\n  };\n\n}\n\nexport default AX6UISelect;"]}