{"version":3,"sources":["AX6UIToast.js"],"names":["_jqmin","require","_AX6Util","_AX6UICore2","_AX6Mustache","tmpl","display","columnKeys","onStateChanged","opts","that","call","this","getContent","data","toastId","theme","icon","msg","replace","btns","closeIcon","open","callback","_this","toastSeqClear","clearTimeout","width","id","instanceId","toastSeq","_jqmin2","default","$toastBox","css","$toastContainer","_AX6Util2","left","config","containerPosition","append","prepend","queue","push","self","state","close","displayTime","on","clickEventName","e","btnOnClick","window","event","setTimeout","toastType","target","k","getAttribute","key","value","btn_target","onClick","AX6UIToast","_classCallCheck","_this2","_possibleConstructorReturn","__proto__","Object","getPrototypeOf","lang","ok","cancel","animateTime","zIndex","body","init","z-index","max-width","attr","initOnce","initialized","isString","title","extend","label","remove","length","addClass","bind"],"mappings":"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","file":"AX6UIToast.js","sourcesContent":["import jQuery from \"jqmin\";\nimport U from \"./AX6Util.js\";\nimport AX6UICore from \"./AX6UICore.js\";\nimport mustache from \"./AX6Mustache\";\n/* ~~~~~~~~~~~~~~~~~~ end of import  ~~~~~~~~~~~~~~~~~~~~ */\n\nlet tmpl = {\n  display(columnKeys) {\n    return `\n<div id=\"{{toastId}}\" data-ax6ui-toast=\"\" class=\"{{theme}}\">\n    {{#icon}}\n    <div class=\"ax-toast-icon\">{{{.}}}</div>\n    {{/icon}}\n    <div class=\"ax-toast-body\">{{{msg}}}</div>\n    {{#btns}}\n    <div class=\"ax-toast-buttons\">\n        <div class=\"ax-button-wrap\">\n            {{#@each}}\n            <button type=\"button\" data-ax-toast-btn=\"{{@key}}\" class=\"btn btn-{{@value.theme}}\">{{{@value.label}}}</button>\n            {{/@each}}\n        </div>\n    </div>\n    {{/btns}}\n    {{^btns}}\n        <a class=\"ax-toast-close\" data-ax-toast-btn=\"ok\">{{{closeIcon}}}</a>\n    {{/btns}}\n    <div style=\"clear:both;\"></div>\n</div>`;\n  }\n};\n\nconst onStateChanged = function (opts, that) {\n  if (opts && opts.onStateChanged) {\n    opts.onStateChanged.call(that, that);\n  }\n  else if (this.onStateChanged) {\n    this.onStateChanged.call(that, that);\n  }\n\n  opts = null;\n  that = null;\n  return true;\n};\nconst getContent = function (toastId, opts) {\n  let data = {\n    toastId: toastId,\n    theme: opts.theme,\n    icon: opts.icon,\n    msg: (opts.msg || \"\").replace(/\\n/g, \"<br/>\"),\n    btns: opts.btns,\n    closeIcon: opts.closeIcon\n  };\n\n  try {\n    return mustache.render(tmpl.display.call(this), data);\n  }\n  finally {\n    toastId = null;\n    data = null;\n  }\n};\nconst open = function (opts, callback) {\n  if (this.toastSeqClear) clearTimeout(this.toastSeqClear);\n\n  let $toastBox,\n    box = {\n      width: opts.width\n    };\n\n  opts.id = 'ax6ui-toast-' + this.instanceId + '-' + (++this.toastSeq);\n\n  if (jQuery('#' + opts.id).get(0)) return this;\n\n  $toastBox = jQuery(getContent(opts.id, opts));\n  $toastBox.css({width: this.$toastContainer.width()});\n\n  if (U.left(this.config.containerPosition, '-') == 'bottom') {\n    this.$toastContainer.append($toastBox);\n  }\n  else {\n    this.$toastContainer.prepend($toastBox);\n  }\n\n  opts.$toastBox = $toastBox;\n  this.queue.push(opts);\n\n  onStateChanged.call(this, opts, {\n    self: this,\n    state: \"open\",\n    toastId: opts.id\n  });\n\n  if (opts.toastType === \"push\") {\n    // 자동 제거 타이머 시작\n    setTimeout(() => {\n      this.close(opts, callback);\n    }, this.config.displayTime);\n\n    $toastBox.on(this.config.clickEventName, '[data-ax-toast-btn]', e => {\n      btnOnClick.call(this, e || window.event, opts, $toastBox, callback);\n    });\n  }\n  else if (opts.toastType === \"confirm\") {\n    $toastBox.on(this.config.clickEventName, '[data-ax-toast-btn]', e => {\n      btnOnClick.call(this, e || window.event, opts, $toastBox, callback);\n    });\n  }\n\n  box = null;\n};\nconst btnOnClick = function (e, opts, $toastBox, callback, target, k) {\n  target = U.findParentNode(e.target, function (target) {\n    if (target.getAttribute(\"data-ax-toast-btn\")) {\n      return true;\n    }\n  });\n\n  if (target) {\n    k = target.getAttribute(\"data-ax-toast-btn\");\n\n    let that = {\n      key: k, value: (opts.btns) ? opts.btns[k] : k,\n      toastId: opts.id,\n      btn_target: target\n    };\n\n    if (opts.btns && opts.btns[k].onClick) {\n      opts.btns[k].onClick.call(that, that);\n    }\n    else if (opts.toastType === \"push\") {\n      if (callback) callback.call(that, that);\n      this.close(opts, callback);\n    }\n    else if (opts.toastType === \"confirm\") {\n      if (callback) callback.call(that, that);\n      this.close(opts);\n    }\n  }\n\n  e = null;\n  opts = null;\n  $toastBox = null;\n  callback = null;\n  target = null;\n  k = null;\n};\n/* ~~~~~~~~~~~~~~~~~~ end of private  ~~~~~~~~~~~~~~~~~~~~ */\n\n/**\n * @class\n */\nclass AX6UIToast 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.width=300]\n     * @param [config.icon='']\n     * @param [config.closeIcon='']\n     * @param [config.msg='']\n     * @param [config.lang]\n     * @param [config.lang.ok='ok']\n     * @param [config.lang.cancel='cancel']\n     * @param [config.displayTime=3000]\n     * @param [config.animateTime=250]\n     * @param [config.containerPosition='bottom-left']\n     */\n    this.config = {\n      clickEventName: \"click\",\n      theme: 'default',\n      width: 300,\n      icon: '',\n      closeIcon: '',\n      msg: '',\n      lang: {\n        \"ok\": \"ok\", \"cancel\": \"cancel\"\n      },\n      displayTime: 3000,\n      animateTime: 250,\n      containerPosition: \"bottom-left\",\n      zIndex: 9999\n    };\n    jQuery.extend(true, this.config, config);\n\n    // 멤버 변수 초기화\n    this.$toastContainer = jQuery('<div data-ax6ui-toast-container=\"' + this.instanceId + '\" data-toast-container-position=\"\"></div>');\n    this.queue = [];\n    this.toastSeq = 0;\n    this.toastSeqClear = null;\n\n    jQuery(document.body).append(this.$toastContainer);\n\n    this.init();\n  }\n\n  /**\n   * @method\n   */\n  init() {\n    this.onStateChanged = this.config.onStateChanged;\n    delete this.config.onStateChanged;\n\n    this.$toastContainer\n      .css({\"z-index\": this.config.zIndex, width: this.config.width, \"max-width\": \"100%\"})\n      .attr(\"data-toast-container-position\", this.config.containerPosition);\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\n  /**\n   * @method\n   * @param opts\n   * @param callback\n   * @return {AX6UIToast}\n   * @example\n   * ```js\n   * import {AX6UIToast as Toast} from \"ax6ui\";\n   *\n   * let toast = new Toast({\n     *  containerPosition: \"bottom-right\"\n     * });\n   *\n   * toast.push(\"toast messages\");\n   * ```\n   */\n  push(opts, callback) {\n    if (U.isString(opts)) {\n      opts = {\n        title: this.config.title,\n        msg: opts\n      }\n    }\n\n    opts.toastType = \"push\";\n    opts = jQuery.extend(true, {}, this.config, opts);\n    open.call(this, opts, callback);\n\n    opts = null;\n    callback = null;\n    return this;\n  }\n\n  /**\n   * @method\n   * @param opts\n   * @param callback\n   * @returns {AX6UIToast}\n   * @example\n   * ```js\n   * import {AX6UIToast as Toast} from \"ax6ui\";\n   *\n   * let toast = new Toast({\n     *  containerPosition: \"bottom-right\"\n     * });\n   *\n   * toast.confirm({\n     *  title: \"예/아니오\",\n     *  msg: \"당신은 개발자 입니까?\",\n     *  btns: {\n     *      Y: {label: \"예\"},\n     *      N: {label: \"아니오\"}\n     *  }\n     * }, function(res){\n     *  console.log(res);\n     * });\n   * ```\n   */\n  confirm(opts, callback) {\n    if (U.isString(opts)) {\n      opts = {\n        title: this.config.title,\n        msg: opts\n      }\n    }\n\n    opts.toastType = \"confirm\";\n    opts = jQuery.extend(true, {}, this.config, opts);\n    if (typeof opts.btns === \"undefined\") {\n      opts.btns = {\n        ok: {label: opts.lang[\"ok\"], theme: opts.theme}\n      };\n    }\n    open.call(this, opts, callback);\n\n    opts = null;\n    callback = null;\n    return this;\n  }\n\n  /**\n   * close the toast\n   * @method\n   * @returns {AX6UIToast}\n   * @example\n   * ```\n   * toast.close();\n   * ```\n   */\n  close(opts, callback) {\n    let $toastBox = opts.$toastBox;\n    $toastBox.addClass((opts.toastType == \"push\") ? \"removed\" : \"destroy\");\n    this.queue = U.filter(this.queue, function () {\n      return opts.id != this.id;\n    });\n\n    setTimeout((function () {\n      var that = {\n        toastId: opts.id\n      };\n\n      $toastBox.remove();\n      if (callback) callback.call(that, that);\n\n      that = {\n        self: this,\n        state: \"close\",\n        toastId: opts.id\n      };\n      onStateChanged.call(this, opts, that);\n\n      // 3초후에도 아무 일이 없다면 완전히 제거\n      if (this.queue.length === 0) {\n        if (this.toastSeqClear) clearTimeout(this.toastSeqClear);\n        this.toastSeqClear = setTimeout((function () {\n          /// console.log(\"try clear seq\");\n          if (this.queue.length === 0) this.toastSeq = 0;\n        }).bind(this), 3000);\n      }\n\n      that = null;\n      opts = null;\n      callback = null;\n      $toastBox = null;\n    }).bind(this), opts.animateTime);\n\n    return this;\n  }\n\n}\n\nexport default AX6UIToast;"]}