text: /*! Editor.md v1.5.0 | editormd.min.js | Open source online markdown editor. | MIT License | By: Pandao | https://github.com/pandao/editor.md | 2015-06-09 */
  !function (e) {
      "use strict";
      "function" == typeof require && "object" == typeof exports && "object" == typeof module ? module.exports = e : "function" == typeof define ? define.amd || define(["jquery"], e) : window.editormd = e()
  }(function () {
      "use strict";
      var e = "undefined" != typeof jQuery ? jQuery : Zepto;
      if ("undefined" != typeof e) {
          var t = function (e, i) {
              return new t.fn.init(e, i)
          };
          t.title = t.$name = "Editor.md", t.version = "1.5.0", t.homePage = "https://pandao.github.io/editor.md/", t.classPrefix = "editormd-", t.toolbarModes = {
              full: ["undo", "redo", "|", "bold", "del", "italic", "quote", "ucwords", "uppercase", "lowercase", "|", "h1", "h2", "h3", "h4", "h5", "h6", "|", "list-ul", "list-ol", "hr", "|", "link", "reference-link", "image", "code", "preformatted-text", "code-block", "table", "datetime", "emoji", "html-entities", "pagebreak", "|", "goto-line", "watch", "preview", "fullscreen", "clear", "search", "|", "help", "info"],
              simple: ["undo", "redo", "|", "bold", "del", "italic", "quote", "uppercase", "lowercase", "|", "h1", "h2", "h3", "h4", "h5", "h6", "|", "list-ul", "list-ol", "hr", "|", "watch", "preview", "fullscreen", "|", "help", "info"],
              mini: ["undo", "redo", "|", "watch", "preview", "|", "help", "info"]
          }, t.defaults = {
              mode: "gfm",
              name: "",
              value: "",
              theme: "",
              editorTheme: "default",
              previewTheme: "",
              markdown: "",
              appendMarkdown: "",
              width: "100%",
              height: "100%",
              path: "./lib/",
              pluginPath: "",
              delay: 300,
              autoLoadModules: !0,
              watch: !0,
              placeholder: "Enjoy Markdown! coding now...",
              gotoLine: !0,
              codeFold: !1,
              autoHeight: !1,
              autoFocus: !0,
              autoCloseTags: !0,
              searchReplace: !0,
              syncScrolling: !0,
              readOnly: !1,
              tabSize: 4,
              indentUnit: 4,
              lineNumbers: !0,
              lineWrapping: !0,
              autoCloseBrackets: !0,
              showTrailingSpace: !0,
              matchBrackets: !0,
              indentWithTabs: !0,
              styleSelectedText: !0,
              matchWordHighlight: !0,
              styleActiveLine: !0,
              dialogLockScreen: !0,
              dialogShowMask: !0,
              dialogDraggable: !0,
              dialogMaskBgColor: "#fff",
              dialogMaskOpacity: .1,
              fontSize: "13px",
              saveHTMLToTextarea: !1,
              disabledKeyMaps: [],
              onload: function () {
              },
              onresize: function () {
              },
              onchange: function () {
              },
              onwatch: null,
              onunwatch: null,
              onpreviewing: function () {
              },
              onpreviewed: function () {
              },
              onfullscreen: function () {
              },
              onfullscreenExit: function () {
              },
              onscroll: function () {
              },
              onpreviewscroll: function () {
              },
              imageUpload: !1,
              imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp"],
              imageUploadURL: "",
              crossDomainUpload: !1,
              uploadCallbackURL: "",
              toc: !0,
              tocm: !1,
              tocTitle: "",
              tocDropdown: !1,
              tocContainer: "",
              tocStartLevel: 1,
              htmlDecode: !1,
              pageBreak: !0,
              atLink: !0,
              emailLink: !0,
              taskList: !1,
              emoji: !1,
              tex: !1,
              flowChart: !1,
              sequenceDiagram: !1,
              previewCodeHighlight: !0,
              toolbar: !0,
              toolbarAutoFixed: !0,
              toolbarIcons: "full",
              toolbarTitles: {},
              toolbarHandlers: {
                  ucwords: function () {
                      return t.toolbarHandlers.ucwords
                  }, lowercase: function () {
                      return t.toolbarHandlers.lowercase
                  }
              },
              toolbarCustomIcons: {
                  lowercase: '<a href="javascript:;" title="Lowercase" unselectable="on"><i class="fa" name="lowercase" style="font-size:24px;margin-top: -10px;">a</i></a>',
                  ucwords: '<a href="javascript:;" title="ucwords" unselectable="on"><i class="fa" name="ucwords" style="font-size:20px;margin-top: -3px;">Aa</i></a>'
              },
              toolbarIconsClass: {
                  undo: "fa-undo",
                  redo: "fa-repeat",
                  bold: "fa-bold",
                  del: "fa-strikethrough",
                  italic: "fa-italic",
                  quote: "fa-quote-left",
                  uppercase: "fa-font",
                  h1: t.classPrefix + "bold",
                  h2: t.classPrefix + "bold",
                  h3: t.classPrefix + "bold",
                  h4: t.classPrefix + "bold",
                  h5: t.classPrefix + "bold",
                  h6: t.classPrefix + "bold",
                  "list-ul": "fa-list-ul",
                  "list-ol": "fa-list-ol",
                  hr: "fa-minus",
                  link: "fa-link",
                  "reference-link": "fa-anchor",
                  image: "fa-picture-o",
                  code: "fa-code",
                  "preformatted-text": "fa-file-code-o",
                  "code-block": "fa-file-code-o",
                  table: "fa-table",
                  datetime: "fa-clock-o",
                  emoji: "fa-smile-o",
                  "html-entities": "fa-copyright",
                  pagebreak: "fa-newspaper-o",
                  "goto-line": "fa-terminal",
                  watch: "fa-eye-slash",
                  unwatch: "fa-eye",
                  preview: "fa-desktop",
                  search: "fa-search",
                  fullscreen: "fa-arrows-alt",
                  clear: "fa-eraser",
                  help: "fa-question-circle",
                  info: "fa-info-circle"
              },
              toolbarIconTexts: {},
              lang: {
                  name: "zh-cn",
                  description: "开源在线Markdown编辑器<br/>Open source online Markdown editor.",
                  tocTitle: "目录",
                  toolbar: {
                      undo: "撤销（Ctrl+Z）",
                      redo: "重做（Ctrl+Y）",
                      bold: "粗体",
                      del: "删除线",
                      italic: "斜体",
                      quote: "引用",
                      ucwords: "将每个单词首字母转成大写",
                      uppercase: "将所选转换成大写",
                      lowercase: "将所选转换成小写",
                      h1: "标题1",
                      h2: "标题2",
                      h3: "标题3",
                      h4: "标题4",
                      h5: "标题5",
                      h6: "标题6",
                      "list-ul": "无序列表",
                      "list-ol": "有序列表",
                      hr: "横线",
                      link: "链接",
                      "reference-link": "引用链接",
                      image: "添加图片",
                      code: "行内代码",
                      "preformatted-text": "预格式文本 / 代码块（缩进风格）",
                      "code-block": "代码块（多语言风格）",
                      table: "添加表格",
                      datetime: "日期时间",
                      emoji: "Emoji表情",
                      "html-entities": "HTML实体字符",
                      pagebreak: "插入分页符",
                      "goto-line": "跳转到行",
                      watch: "关闭实时预览",
                      unwatch: "开启实时预览",
                      preview: "全窗口预览HTML（按 Shift + ESC还原）",
                      fullscreen: "全屏（按ESC还原）",
                      clear: "清空",
                      search: "搜索",
                      help: "使用帮助",
                      info: "关于" + t.title
                  },
                  buttons: {enter: "确定", cancel: "取消", close: "关闭"},
                  dialog: {
                      link: {title: "添加链接", url: "链接地址", urlTitle: "链接标题", urlEmpty: "错误：请填写链接地址。"},
                      referenceLink: {
                          title: "添加引用链接",
                          name: "引用名称",
                          url: "链接地址",
                          urlId: "链接ID",
                          urlTitle: "链接标题",
                          nameEmpty: "错误：引用链接的名称不能为空。",
                          idEmpty: "错误：请填写引用链接的ID。",
                          urlEmpty: "错误：请填写引用链接的URL地址。"
                      },
                      image: {
                          title: "添加图片",
                          url: "图片地址",
                          link: "图片链接",
                          alt: "图片描述",
                          uploadButton: "本地上传",
                          imageURLEmpty: "错误：图片地址不能为空。",
                          uploadFileEmpty: "错误：上传的图片不能为空。",
                          formatNotAllowed: "错误：只允许上传图片文件，允许上传的图片文件格式有："
                      },
                      preformattedText: {title: "添加预格式文本或代码块", emptyAlert: "错误：请填写预格式文本或代码的内容。"},
                      codeBlock: {
                          title: "添加代码块",
                          selectLabel: "代码语言：",
                          selectDefaultText: "请选择代码语言",
                          otherLanguage: "其他语言",
                          unselectedLanguageAlert: "错误：请选择代码所属的语言类型。",
                          codeEmptyAlert: "错误：请填写代码内容。"
                      },
                      htmlEntities: {title: "HTML 实体字符"},
                      help: {title: "使用帮助"}
                  }
              }
          }, t.classNames = {tex: t.classPrefix + "tex"}, t.dialogZindex = 99999, t.$katex = null, t.$marked = null, t.$CodeMirror = null, t.$prettyPrint = null;
          var i, o;
          t.prototype = t.fn = {
              state: {watching: !1, loaded: !1, preview: !1, fullscreen: !1}, init: function (i, o) {
                  o = o || {}, "object" == typeof i && (o = i);
                  var r = this.classPrefix = t.classPrefix, n = this.settings = e.extend(!0, t.defaults, o);
                  i = "object" == typeof i ? n.id : i;
                  var a = this.editor = e("#" + i);
                  this.id = i, this.lang = n.lang;
                  var s = this.classNames = {textarea: {html: r + "html-textarea", markdown: r + "markdown-textarea"}};
                  n.pluginPath = "" === n.pluginPath ? n.path + "../plugins/" : n.pluginPath, this.state.watching = n.watch ? !0 : !1, a.hasClass("editormd") || a.addClass("editormd"), a.css({
                      width: "number" == typeof n.width ? n.width + "px" : n.width,
                      height: "number" == typeof n.height ? n.height + "px" : n.height
                  }), n.autoHeight && a.css("height", "auto");
                  var l = this.markdownTextarea = a.children("textarea");
                  l.length < 1 && (a.append("<textarea></textarea>"), l = this.markdownTextarea = a.children("textarea")), l.addClass(s.textarea.markdown).attr("placeholder", n.placeholder), ("undefined" == typeof l.attr("name") || "" === l.attr("name")) && l.attr("name", "" !== n.name ? n.name : i + "-markdown-doc");
                  var c = [n.readOnly ? "" : '<a href="javascript:;" class="fa fa-close ' + r + 'preview-close-btn"></a>', n.saveHTMLToTextarea ? '<textarea class="' + s.textarea.html + '" name="' + i + '-html-code"></textarea>' : "", '<div class="' + r + 'preview"><div class="markdown-body ' + r + 'preview-container"></div></div>', '<div class="' + r + 'container-mask" style="display:block;"></div>', '<div class="' + r + 'mask"></div>'].join("\n");
                  return a.append(c).addClass(r + "vertical"), "" !== n.theme && a.addClass(r + "theme-" + n.theme), this.mask = a.children("." + r + "mask"), this.containerMask = a.children("." + r + "container-mask"), "" !== n.markdown && l.val(n.markdown), "" !== n.appendMarkdown && l.val(l.val() + n.appendMarkdown), this.htmlTextarea = a.children("." + s.textarea.html), this.preview = a.children("." + r + "preview"), this.previewContainer = this.preview.children("." + r + "preview-container"), "" !== n.previewTheme && this.preview.addClass(r + "preview-theme-" + n.previewTheme), "function" == typeof define && define.amd && ("undefined" != typeof katex && (t.$katex = katex), n.searchReplace && !n.readOnly && (t.loadCSS(n.path + "codemirror/addon/dialog/dialog"), t.loadCSS(n.path + "codemirror/addon/search/matchesonscrollbar"))), "function" == typeof define && define.amd || !n.autoLoadModules ? ("undefined" != typeof CodeMirror && (t.$CodeMirror = CodeMirror), "undefined" != typeof marked && (t.$marked = marked), this.setCodeMirror().setToolbar().loadedDisplay()) : this.loadQueues(), this
              }, loadQueues: function () {
                  var e = this, i = this.settings, o = i.path, r = function () {
                      return t.isIE8 ? void e.loadedDisplay() : void(i.flowChart || i.sequenceDiagram ? t.loadScript(o + "raphael.min", function () {
                          t.loadScript(o + "underscore.min", function () {
                              !i.flowChart && i.sequenceDiagram ? t.loadScript(o + "sequence-diagram.min", function () {
                                  e.loadedDisplay()
                              }) : i.flowChart && !i.sequenceDiagram ? t.loadScript(o + "flowchart.min", function () {
                                  t.loadScript(o + "jquery.flowchart.min", function () {
                                      e.loadedDisplay()
                                  })
                              }) : i.flowChart && i.sequenceDiagram && t.loadScript(o + "flowchart.min", function () {
                                  t.loadScript(o + "jquery.flowchart.min", function () {
                                      t.loadScript(o + "sequence-diagram.min", function () {
                                          e.loadedDisplay()
                                      })
                                  })
                              })
                          })
                      }) : e.loadedDisplay())
                  };
                  return t.loadCSS(o + "codemirror/codemirror.min"), i.searchReplace && !i.readOnly && (t.loadCSS(o + "codemirror/addon/dialog/dialog"), t.loadCSS(o + "codemirror/addon/search/matchesonscrollbar")), i.codeFold && t.loadCSS(o + "codemirror/addon/fold/foldgutter"), t.loadScript(o + "codemirror/codemirror.min", function () {
                      t.$CodeMirror = CodeMirror, t.loadScript(o + "codemirror/modes.min", function () {
                          t.loadScript(o + "codemirror/addons.min", function () {
                              return e.setCodeMirror(), "gfm" !== i.mode && "markdown" !== i.mode ? (e.loadedDisplay(), !1) : (e.setToolbar(), void t.loadScript(o + "marked.min", function () {
                                  t.$marked = marked, i.previewCodeHighlight ? t.loadScript(o + "prettify.min", function () {
                                      r()
                                  }) : r()
                              }))
                          })
                      })
                  }), this
              }, setTheme: function (e) {
                  var t = this.editor, i = this.settings.theme, o = this.classPrefix + "theme-";
                  return t.removeClass(o + i).addClass(o + e), this.settings.theme = e, this
              }, setEditorTheme: function (e) {
                  var i = this.settings;
                  return i.editorTheme = e, "default" !== e && t.loadCSS(i.path + "codemirror/theme/" + i.editorTheme), this.cm.setOption("theme", e), this
              }, setCodeMirrorTheme: function (e) {
                  return this.setEditorTheme(e), this
              }, setPreviewTheme: function (e) {
                  var t = this.preview, i = this.settings.previewTheme, o = this.classPrefix + "preview-theme-";
                  return t.removeClass(o + i).addClass(o + e), this.settings.previewTheme = e, this
              }, setCodeMirror: function () {
                  var e = this.settings, i = this.editor;
                  "default" !== e.editorTheme && t.loadCSS(e.path + "codemirror/theme/" + e.editorTheme);
                  var o = {
                      mode: e.mode,
                      theme: e.editorTheme,
                      tabSize: e.tabSize,
                      dragDrop: !1,
                      autofocus: e.autoFocus,
                      autoCloseTags: e.autoCloseTags,
                      readOnly: e.readOnly ? "nocursor" : !1,
                      indentUnit: e.indentUnit,
                      lineNumbers: e.lineNumbers,
                      lineWrapping: e.lineWrapping,
                      extraKeys: {
                          "Ctrl-Q": function (e) {
                              e.foldCode(e.getCursor())
                          }
                      },
                      foldGutter: e.codeFold,
                      gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"],
                      matchBrackets: e.matchBrackets,
                      indentWithTabs: e.indentWithTabs,
                      styleActiveLine: e.styleActiveLine,
                      styleSelectedText: e.styleSelectedText,
                      autoCloseBrackets: e.autoCloseBrackets,
                      showTrailingSpace: e.showTrailingSpace,
                      highlightSelectionMatches: e.matchWordHighlight ? {showToken: "onselected" === e.matchWordHighlight ? !1 : /\w/} : !1
                  };
                  return this.codeEditor = this.cm = t.$CodeMirror.fromTextArea(this.markdownTextarea[0], o), this.codeMirror = this.cmElement = i.children(".CodeMirror"), "" !== e.value && this.cm.setValue(e.value), this.codeMirror.css({
                      fontSize: e.fontSize,
                      width: e.watch ? "50%" : "100%"
                  }), e.autoHeight && (this.codeMirror.css("height", "auto"), this.cm.setOption("viewportMargin", 1 / 0)), e.lineNumbers || this.codeMirror.find(".CodeMirror-gutters").css("border-right", "none"), this
              }, getCodeMirrorOption: function (e) {
                  return this.cm.getOption(e)
              }, setCodeMirrorOption: function (e, t) {
                  return this.cm.setOption(e, t), this
              }, addKeyMap: function (e, t) {
                  return this.cm.addKeyMap(e, t), this
              }, removeKeyMap: function (e) {
                  return this.cm.removeKeyMap(e), this
              }, gotoLine: function (t) {
                  var i = this.settings;
                  if (!i.gotoLine) return this;
                  var o = this.cm, r = (this.editor, o.lineCount()), n = this.preview;
                  if ("string" == typeof t && ("last" === t && (t = r), "first" === t && (t = 1)), "number" != typeof t) return alert("Error: The line number must be an integer."), this;
                  if (t = parseInt(t) - 1, t > r) return alert("Error: The line number range 1-" + r), this;
                  o.setCursor({line: t, ch: 0});
                  var a = o.getScrollInfo(), s = a.clientHeight, l = o.charCoords({line: t, ch: 0}, "local");
                  if (o.scrollTo(null, (l.top + l.bottom - s) / 2), i.watch) {
                      var c = this.codeMirror.find(".CodeMirror-scroll")[0], h = e(c).height(), d = c.scrollTop,
                          u = d / c.scrollHeight;
                      n.scrollTop(0 === d ? 0 : d + h >= c.scrollHeight - 16 ? n[0].scrollHeight : n[0].scrollHeight * u)
                  }
                  return o.focus(), this
              }, extend: function () {
                  return "undefined" != typeof arguments[1] && ("function" == typeof arguments[1] && (arguments[1] = e.proxy(arguments[1], this)), this[arguments[0]] = arguments[1]), "object" == typeof arguments[0] && "undefined" == typeof arguments[0].length && e.extend(!0, this, arguments[0]), this
              }, set: function (t, i) {
                  return "undefined" != typeof i && "function" == typeof i && (i = e.proxy(i, this)), this[t] = i, this
              }, config: function (t, i) {
                  var o = this.settings;
                  return "object" == typeof t && (o = e.extend(!0, o, t)), "string" == typeof t && (o[t] = i), this.settings = o, this.recreate(), this
              }, on: function (t, i) {
                  var o = this.settings;
                  return "undefined" != typeof o["on" + t] && (o["on" + t] = e.proxy(i, this)), this
              }, off: function (e) {
                  var t = this.settings;
                  return "undefined" != typeof t["on" + e] && (t["on" + e] = function () {
                  }), this
              }, showToolbar: function (t) {
                  var i = this.settings;
                  return i.readOnly ? this : (i.toolbar && (this.toolbar.length < 1 || "" === this.toolbar.find("." + this.classPrefix + "menu").html()) && this.setToolbar(), i.toolbar = !0, this.toolbar.show(), this.resize(), e.proxy(t || function () {
                  }, this)(), this)
              }, hideToolbar: function (t) {
                  var i = this.settings;
                  return i.toolbar = !1, this.toolbar.hide(), this.resize(), e.proxy(t || function () {
                  }, this)(), this
              }, setToolbarAutoFixed: function (t) {
                  var i = this.state, o = this.editor, r = this.toolbar, n = this.settings;
                  "undefined" != typeof t && (n.toolbarAutoFixed = t);
                  var a = function () {
                      var t = e(window), i = t.scrollTop();
                      return n.toolbarAutoFixed ? void r.css(i - o.offset().top > 10 && i < o.height() ? {
                          position: "fixed",
                          width: o.width() + "px",
                          left: (t.width() - o.width()) / 2 + "px"
                      } : {position: "absolute", width: "100%", left: 0}) : !1
                  };
                  return !i.fullscreen && !i.preview && n.toolbar && n.toolbarAutoFixed && e(window).bind("scroll", a), this
              }, setToolbar: function () {
                  var e = this.settings;
                  if (e.readOnly) return this;
                  var i = this.editor, o = (this.preview, this.classPrefix),
                      r = this.toolbar = i.children("." + o + "toolbar");
                  if (e.toolbar && r.length < 1) {
                      var n = '<div class="' + o + 'toolbar"><div class="' + o + 'toolbar-container"><ul class="' + o + 'menu"></ul></div></div>';
                      i.append(n), r = this.toolbar = i.children("." + o + "toolbar")
                  }
                  if (!e.toolbar) return r.hide(), this;
                  r.show();
                  for (var a = "function" == typeof e.toolbarIcons ? e.toolbarIcons() : "string" == typeof e.toolbarIcons ? t.toolbarModes[e.toolbarIcons] : e.toolbarIcons, s = r.find("." + this.classPrefix + "menu"), l = "", c = !1, h = 0, d = a.length; d > h; h++) {
                      var u = a[h];
                      if ("||" === u) c = !0; else if ("|" === u) l += '<li class="divider" unselectable="on">|</li>'; else {
                          var f = /h(\d)/.test(u), g = u;
                          "watch" !== u || e.watch || (g = "unwatch");
                          var p = e.lang.toolbar[g], m = e.toolbarIconTexts[g], w = e.toolbarIconsClass[g];
                          p = "undefined" == typeof p ? "" : p, m = "undefined" == typeof m ? "" : m, w = "undefined" == typeof w ? "" : w;
                          var v = c ? '<li class="pull-right">' : "<li>";
                          "undefined" != typeof e.toolbarCustomIcons[u] && "function" != typeof e.toolbarCustomIcons[u] ? v += e.toolbarCustomIcons[u] : (v += '<a href="javascript:;" title="' + p + '" unselectable="on">', v += '<i class="fa ' + w + '" name="' + u + '" unselectable="on">' + (f ? u.toUpperCase() : "" === w ? m : "") + "</i>", v += "</a>"), v += "</li>", l = c ? v + l : l + v
                      }
                  }
                  return s.html(l), s.find('[title="Lowercase"]').attr("title", e.lang.toolbar.lowercase), s.find('[title="ucwords"]').attr("title", e.lang.toolbar.ucwords), this.setToolbarHandler(), this.setToolbarAutoFixed(), this
              }, dialogLockScreen: function () {
                  return e.proxy(t.dialogLockScreen, this)(), this
              }, dialogShowMask: function (i) {
                  return e.proxy(t.dialogShowMask, this)(i), this
              }, getToolbarHandles: function (e) {
                  var i = this.toolbarHandlers = t.toolbarHandlers;
                  return e && "undefined" != typeof toolbarIconHandlers[e] ? i[e] : i
              }, setToolbarHandler: function () {
                  var i = this, o = this.settings;
                  if (!o.toolbar || o.readOnly) return this;
                  var r = this.toolbar, n = this.cm, a = this.classPrefix,
                      s = this.toolbarIcons = r.find("." + a + "menu > li > a"), l = this.getToolbarHandles();
                  return s.bind(t.mouseOrTouch("click", "touchend"), function (t) {
                      var r = e(this).children(".fa"), a = r.attr("name"), s = n.getCursor(), c = n.getSelection();
                      return "" !== a ? (i.activeIcon = r, "undefined" != typeof l[a] ? e.proxy(l[a], i)(n) : "undefined" != typeof o.toolbarHandlers[a] && e.proxy(o.toolbarHandlers[a], i)(n, r, s, c), "link" !== a && "reference-link" !== a && "image" !== a && "code-block" !== a && "preformatted-text" !== a && "watch" !== a && "preview" !== a && "search" !== a && "fullscreen" !== a && "info" !== a && n.focus(), !1) : void 0
                  }), this
              }, createDialog: function (i) {
                  return e.proxy(t.createDialog, this)(i)
              }, createInfoDialog: function () {
                  var e = this, i = this.editor, o = this.classPrefix,
                      r = ['<div class="' + o + "dialog " + o + 'dialog-info" style="">', '<div class="' + o + 'dialog-container">', '<h1><i class="editormd-logo editormd-logo-lg editormd-logo-color"></i> ' + t.title + "<small>v" + t.version + "</small></h1>", "<p>" + this.lang.description + "</p>", '<p style="margin: 10px 0 20px 0;"><a href="' + t.homePage + '" target="_blank">' + t.homePage + ' <i class="fa fa-external-link"></i></a></p>', '<p style="font-size: 0.85em;">Copyright &copy; 2015 <a href="https://github.com/pandao" target="_blank" class="hover-link">Pandao</a>, The <a href="https://github.com/pandao/editor.md/blob/master/LICENSE" target="_blank" class="hover-link">MIT</a> License.</p>', "</div>", '<a href="javascript:;" class="fa fa-close ' + o + 'dialog-close"></a>', "</div>"].join("\n");
                  i.append(r);
                  var n = this.infoDialog = i.children("." + o + "dialog-info");
                  return n.find("." + o + "dialog-close").bind(t.mouseOrTouch("click", "touchend"), function () {
                      e.hideInfoDialog()
                  }), n.css("border", t.isIE8 ? "1px solid #ddd" : "").css("z-index", t.dialogZindex).show(), this.infoDialogPosition(), this
              }, infoDialogPosition: function () {
                  var t = this.infoDialog, i = function () {
                      t.css({
                          top: (e(window).height() - t.height()) / 2 + "px",
                          left: (e(window).width() - t.width()) / 2 + "px"
                      })
                  };
                  return i(), e(window).resize(i), this
              }, showInfoDialog: function () {
                  e("html,body").css("overflow-x", "hidden");
                  var i = this.editor, o = this.settings,
                      r = this.infoDialog = i.children("." + this.classPrefix + "dialog-info");
                  return r.length < 1 && this.createInfoDialog(), this.lockScreen(!0), this.mask.css({
                      opacity: o.dialogMaskOpacity,
                      backgroundColor: o.dialogMaskBgColor
                  }).show(), r.css("z-index", t.dialogZindex).show(), this.infoDialogPosition(), this
              }, hideInfoDialog: function () {
                  return e("html,body").css("overflow-x", ""), this.infoDialog.hide(), this.mask.hide(), this.lockScreen(!1), this
              }, lockScreen: function (e) {
                  return t.lockScreen(e), this.resize(), this
              }, recreate: function () {
                  var e = this.editor, t = this.settings;
                  return this.codeMirror.remove(), this.setCodeMirror(), t.readOnly || (e.find(".editormd-dialog").length > 0 && e.find(".editormd-dialog").remove(), t.toolbar && (this.getToolbarHandles(), this.setToolbar())), this.loadedDisplay(!0), this
              }, previewCodeHighlight: function () {
                  var e = this.settings, t = this.previewContainer;
                  return e.previewCodeHighlight && (t.find("pre").addClass("prettyprint linenums"), "undefined" != typeof prettyPrint && prettyPrint()), this
              }, katexRender: function () {
                  return null === i ? this : (this.previewContainer.find("." + t.classNames.tex).each(function () {
                      var i = e(this);
                      t.$katex.render(i.text(), i[0]), i.find(".katex").css("font-size", "1.6em")
                  }), this)
              }, flowChartAndSequenceDiagramRender: function () {
                  var i = this, r = this.settings, n = this.previewContainer;
                  if (t.isIE8) return this;
                  if (r.flowChart) {
                      if (null === o) return this;
                      n.find(".flowchart").flowChart()
                  }
                  r.sequenceDiagram && n.find(".sequence-diagram").sequenceDiagram({theme: "simple"});
                  var a = i.preview, s = i.codeMirror, l = s.find(".CodeMirror-scroll"), c = l.height(),
                      h = l.scrollTop(), d = h / l[0].scrollHeight, u = 0;
                  a.find(".markdown-toc-list").each(function () {
                      u += e(this).height()
                  });
                  var f = a.find(".editormd-toc-menu").height();
                  return f = f ? f : 0, a.scrollTop(0 === h ? 0 : h + c >= l[0].scrollHeight - 16 ? a[0].scrollHeight : (a[0].scrollHeight + u + f) * d), this
              }, registerKeyMaps: function (i) {
                  var o = this, r = this.cm, n = this.settings, a = t.toolbarHandlers, s = n.disabledKeyMaps;
                  if (i = i || null) {
                      for (var l in i) if (e.inArray(l, s) < 0) {
                          var c = {};
                          c[l] = i[l], r.addKeyMap(i)
                      }
                  } else {
                      for (var h in t.keyMaps) {
                          var d = t.keyMaps[h], u = "string" == typeof d ? e.proxy(a[d], o) : e.proxy(d, o);
                          if (e.inArray(h, ["F9", "F10", "F11"]) < 0 && e.inArray(h, s) < 0) {
                              var f = {};
                              f[h] = u, r.addKeyMap(f)
                          }
                      }
                      e(window).keydown(function (t) {
                          var i = {120: "F9", 121: "F10", 122: "F11"};
                          if (e.inArray(i[t.keyCode], s) < 0) switch (t.keyCode) {
                              case 120:
                                  return e.proxy(a.watch, o)(), !1;
                              case 121:
                                  return e.proxy(a.preview, o)(), !1;
                              case 122:
                                  return e.proxy(a.fullscreen, o)(), !1
                          }
                      })
                  }
                  return this
              }, bindScrollEvent: function () {
                  var i = this, o = this.preview, r = this.settings, n = this.codeMirror, a = t.mouseOrTouch;
                  if (!r.syncScrolling) return this;
                  var s = function () {
                      n.find(".CodeMirror-scroll").bind(a("scroll", "touchmove"), function (t) {
                          var n = e(this).height(), a = e(this).scrollTop(), s = a / e(this)[0].scrollHeight, l = 0;
                          o.find(".markdown-toc-list").each(function () {
                              l += e(this).height()
                          });
                          var c = o.find(".editormd-toc-menu").height();
                          c = c ? c : 0, o.scrollTop(0 === a ? 0 : a + n >= e(this)[0].scrollHeight - 16 ? o[0].scrollHeight : (o[0].scrollHeight + l + c) * s), e.proxy(r.onscroll, i)(t)
                      })
                  }, l = function () {
                      n.find(".CodeMirror-scroll").unbind(a("scroll", "touchmove"))
                  }, c = function () {
                      o.bind(a("scroll", "touchmove"), function (t) {
                          var o = e(this).height(), a = e(this).scrollTop(), s = a / e(this)[0].scrollHeight,
                              l = n.find(".CodeMirror-scroll");
                          l.scrollTop(0 === a ? 0 : a + o >= e(this)[0].scrollHeight ? l[0].scrollHeight : l[0].scrollHeight * s), e.proxy(r.onpreviewscroll, i)(t)
                      })
                  }, h = function () {
                      o.unbind(a("scroll", "touchmove"))
                  };
                  return n.bind({
                      mouseover: s,
                      mouseout: l,
                      touchstart: s,
                      touchend: l
                  }), "single" === r.syncScrolling ? this : (o.bind({
                      mouseover: c,
                      mouseout: h,
                      touchstart: c,
                      touchend: h
                  }), this)
              }, bindChangeEvent: function () {
                  var e = this, t = this.cm, o = this.settings;
                  return o.syncScrolling ? (t.on("change", function (t, r) {
                      o.watch && e.previewContainer.css("padding", o.autoHeight ? "20px 20px 50px 40px" : "20px"), i = setTimeout(function () {
                          clearTimeout(i), e.save(), i = null
                      }, o.delay)
                  }), this) : this
              }, loadedDisplay: function (t) {
                  t = t || !1;
                  var i = this, o = this.editor, r = this.preview, n = this.settings;
                  return this.containerMask.hide(), this.save(), n.watch && r.show(), o.data("oldWidth", o.width()).data("oldHeight", o.height()), this.resize(), this.registerKeyMaps(), e(window).resize(function () {
                      i.resize()
                  }), this.bindScrollEvent().bindChangeEvent(), t || e.proxy(n.onload, this)(), this.state.loaded = !0, this
              }, width: function (e) {
                  return this.editor.css("width", "number" == typeof e ? e + "px" : e), this.resize(), this
              }, height: function (e) {
                  return this.editor.css("height", "number" == typeof e ? e + "px" : e), this.resize(), this
              }, resize: function (t, i) {
                  t = t || null, i = i || null;
                  var o = this.state, r = this.editor, n = this.preview, a = this.toolbar, s = this.settings,
                      l = this.codeMirror;
                  if (t && r.css("width", "number" == typeof t ? t + "px" : t), !s.autoHeight || o.fullscreen || o.preview ? (i && r.css("height", "number" == typeof i ? i + "px" : i), o.fullscreen && r.height(e(window).height()), s.toolbar && !s.readOnly ? l.css("margin-top", a.height() + 1).height(r.height() - a.height()) : l.css("margin-top", 0).height(r.height())) : (r.css("height", "auto"), l.css("height", "auto")), s.watch) if (l.width(r.width() / 2), n.width(o.preview ? r.width() : r.width() / 2), this.previewContainer.css("padding", s.autoHeight ? "20px 20px 50px 40px" : "20px"), s.toolbar && !s.readOnly ? n.css("top", a.height() + 1) : n.css("top", 0), !s.autoHeight || o.fullscreen || o.preview) {
                      var c = s.toolbar && !s.readOnly ? r.height() - a.height() : r.height();
                      n.height(c)
                  } else n.height(""); else l.width(r.width()), n.hide();
                  return o.loaded && e.proxy(s.onresize, this)(), this
              }, save: function () {
                  if (null === i) return this;
                  var r = this, n = this.state, a = this.settings, s = this.cm, l = s.getValue(),
                      c = this.previewContainer;
                  if ("gfm" !== a.mode && "markdown" !== a.mode) return this.markdownTextarea.val(l), this;
                  var h = t.$marked, d = this.markdownToC = [], u = this.markedRendererOptions = {
                      toc: a.toc,
                      tocm: a.tocm,
                      tocStartLevel: a.tocStartLevel,
                      pageBreak: a.pageBreak,
                      taskList: a.taskList,
                      emoji: a.emoji,
                      tex: a.tex,
                      atLink: a.atLink,
                      emailLink: a.emailLink,
                      flowChart: a.flowChart,
                      sequenceDiagram: a.sequenceDiagram,
                      previewCodeHighlight: a.previewCodeHighlight
                  }, f = this.markedOptions = {
                      renderer: t.markedRenderer(d, u),
                      gfm: !0,
                      tables: !0,
                      breaks: !0,
                      pedantic: !1,
                      sanitize: a.htmlDecode ? !1 : !0,
                      smartLists: !0,
                      smartypants: !0
                  };
                  h.setOptions(f);
                  var g = t.$marked(l, f);
                  if (g = t.filterHTMLTags(g, a.htmlDecode), this.markdownTextarea.text(l), s.save(), a.saveHTMLToTextarea && this.htmlTextarea.text(g), a.watch || !a.watch && n.preview) {
                      if (c.html(g), this.previewCodeHighlight(), a.toc) {
                          var p = "" === a.tocContainer ? c : e(a.tocContainer),
                              m = p.find("." + this.classPrefix + "toc-menu");
                          p.attr("previewContainer", "" === a.tocContainer ? "true" : "false"), "" !== a.tocContainer && m.length > 0 && m.remove(), t.markdownToCRenderer(d, p, a.tocDropdown, a.tocStartLevel), (a.tocDropdown || p.find("." + this.classPrefix + "toc-menu").length > 0) && t.tocDropdownMenu(p, "" !== a.tocTitle ? a.tocTitle : this.lang.tocTitle), "" !== a.tocContainer && c.find(".markdown-toc").css("border", "none")
                      }
                      a.tex && (!t.kaTeXLoaded && a.autoLoadModules ? t.loadKaTeX(function () {
                          t.$katex = katex, t.kaTeXLoaded = !0, r.katexRender()
                      }) : (t.$katex = katex, this.katexRender())), (a.flowChart || a.sequenceDiagram) && (o = setTimeout(function () {
                          clearTimeout(o), r.flowChartAndSequenceDiagramRender(), o = null
                      }, 10)), n.loaded && e.proxy(a.onchange, this)()
                  }
                  return this
              }, focus: function () {
                  return this.cm.focus(), this
              }, setCursor: function (e) {
                  return this.cm.setCursor(e), this
              }, getCursor: function () {
                  return this.cm.getCursor()
              }, setSelection: function (e, t) {
                  return this.cm.setSelection(e, t), this
              }, getSelection: function () {
                  return this.cm.getSelection()
              }, setSelections: function (e) {
                  return this.cm.setSelections(e), this
              }, getSelections: function () {
                  return this.cm.getSelections()
              }, replaceSelection: function (e) {
                  return this.cm.replaceSelection(e), this
              }, insertValue: function (e) {
                  return this.replaceSelection(e), this
              }, appendMarkdown: function (e) {
                  var t = (this.settings, this.cm);
                  return t.setValue(t.getValue() + e), this
              }, setMarkdown: function (e) {
                  return this.cm.setValue(e || this.settings.markdown), this
              }, getMarkdown: function () {
                  return this.cm.getValue()
              }, getValue: function () {
                  return this.cm.getValue()
              }, setValue: function (e) {
                  return this.cm.setValue(e), this
              }, clear: function () {
                  return this.cm.setValue(""), this
              }, getHTML: function () {
                  return this.settings.saveHTMLToTextarea ? this.htmlTextarea.val() : (alert("Error: settings.saveHTMLToTextarea == false"), !1)
              }, getTextareaSavedHTML: function () {
                  return this.getHTML()
              }, getPreviewedHTML: function () {
                  return this.settings.watch ? this.previewContainer.html() : (alert("Error: settings.watch == false"), !1)
              }, watch: function (t) {
                  var o = this.settings;
                  if (e.inArray(o.mode, ["gfm", "markdown"]) < 0) return this;
                  if (this.state.watching = o.watch = !0, this.preview.show(), this.toolbar) {
                      var r = o.toolbarIconsClass.watch, n = o.toolbarIconsClass.unwatch,
                          a = this.toolbar.find(".fa[name=watch]");
                      a.parent().attr("title", o.lang.toolbar.watch), a.removeClass(n).addClass(r)
                  }
                  return this.codeMirror.css("border-right", "1px solid #ddd").width(this.editor.width() / 2), i = 0, this.save().resize(), o.onwatch || (o.onwatch = t || function () {
                  }), e.proxy(o.onwatch, this)(), this
              }, unwatch: function (t) {
                  var i = this.settings;
                  if (this.state.watching = i.watch = !1, this.preview.hide(), this.toolbar) {
                      var o = i.toolbarIconsClass.watch, r = i.toolbarIconsClass.unwatch,
                          n = this.toolbar.find(".fa[name=watch]");
                      n.parent().attr("title", i.lang.toolbar.unwatch), n.removeClass(o).addClass(r)
                  }
                  return this.codeMirror.css("border-right", "none").width(this.editor.width()), this.resize(), i.onunwatch || (i.onunwatch = t || function () {
                  }), e.proxy(i.onunwatch, this)(), this
              }, show: function (t) {
                  t = t || function () {
                  };
                  var i = this;
                  return this.editor.show(0, function () {
                      e.proxy(t, i)()
                  }), this
              }, hide: function (t) {
                  t = t || function () {
                  };
                  var i = this;
                  return this.editor.hide(0, function () {
                      e.proxy(t, i)()
                  }), this
              }, previewing: function () {
                  var i = this, o = this.editor, r = this.preview, n = this.toolbar, a = this.settings,
                      s = this.codeMirror, l = this.previewContainer;
                  if (e.inArray(a.mode, ["gfm", "markdown"]) < 0) return this;
                  a.toolbar && n && (n.toggle(), n.find(".fa[name=preview]").toggleClass("active")), s.toggle();
                  var c = function (e) {
                      e.shiftKey && 27 === e.keyCode && i.previewed()
                  };
                  "none" === s.css("display") ? (this.state.preview = !0, this.state.fullscreen && r.css("background", "#fff"), o.find("." + this.classPrefix + "preview-close-btn").show().bind(t.mouseOrTouch("click", "touchend"), function () {
                      i.previewed()
                  }), a.watch ? l.css("padding", "") : this.save(), l.addClass(this.classPrefix + "preview-active"), r.show().css({
                      position: "",
                      top: 0,
                      width: o.width(),
                      height: a.autoHeight && !this.state.fullscreen ? "auto" : o.height()
                  }), this.state.loaded && e.proxy(a.onpreviewing, this)(), e(window).bind("keyup", c)) : (e(window).unbind("keyup", c), this.previewed())
              }, previewed: function () {
                  var i = this.editor, o = this.preview, r = this.toolbar, n = this.settings, a = this.previewContainer,
                      s = i.find("." + this.classPrefix + "preview-close-btn");
                  return this.state.preview = !1, this.codeMirror.show(), n.toolbar && r.show(), o[n.watch ? "show" : "hide"](), s.hide().unbind(t.mouseOrTouch("click", "touchend")), a.removeClass(this.classPrefix + "preview-active"), n.watch && a.css("padding", "20px"), o.css({
                      background: null,
                      position: "absolute",
                      width: i.width() / 2,
                      height: n.autoHeight && !this.state.fullscreen ? "auto" : i.height() - r.height(),
                      top: n.toolbar ? r.height() : 0
                  }), this.state.loaded && e.proxy(n.onpreviewed, this)(), this
              }, fullscreen: function () {
                  var t = this, i = this.state, o = this.editor, r = (this.preview, this.toolbar), n = this.settings,
                      a = this.classPrefix + "fullscreen";
                  r && r.find(".fa[name=fullscreen]").parent().toggleClass("active");
                  var s = function (e) {
                      e.shiftKey || 27 !== e.keyCode || i.fullscreen && t.fullscreenExit()
                  };
                  return o.hasClass(a) ? (e(window).unbind("keyup", s), this.fullscreenExit()) : (i.fullscreen = !0, e("html,body").css("overflow", "hidden"), o.css({
                      width: e(window).width(),
                      height: e(window).height()
                  }).addClass(a), this.resize(), e.proxy(n.onfullscreen, this)(), e(window).bind("keyup", s)), this
              }, fullscreenExit: function () {
                  var t = this.editor, i = this.settings, o = this.toolbar, r = this.classPrefix + "fullscreen";
                  return this.state.fullscreen = !1, o && o.find(".fa[name=fullscreen]").parent().removeClass("active"), e("html,body").css("overflow", ""), t.css({
                      width: t.data("oldWidth"),
                      height: t.data("oldHeight")
                  }).removeClass(r), this.resize(), e.proxy(i.onfullscreenExit, this)(), this
              }, executePlugin: function (i, o) {
                  var r = this, n = this.cm, a = this.settings;
                  return o = a.pluginPath + o, "function" == typeof define ? "undefined" == typeof this[i] ? (alert("Error: " + i + " plugin is not found, you are not load this plugin."), this) : (this[i](n), this) : (e.inArray(o, t.loadFiles.plugin) < 0 ? t.loadPlugin(o, function () {
                      t.loadPlugins[i] = r[i], r[i](n)
                  }) : e.proxy(t.loadPlugins[i], this)(n), this)
              }, search: function (e) {
                  var t = this.settings;
                  return t.searchReplace ? (t.readOnly || this.cm.execCommand(e || "find"), this) : (alert("Error: settings.searchReplace == false"), this)
              }, searchReplace: function () {
                  return this.search("replace"), this
              }, searchReplaceAll: function () {
                  return this.search("replaceAll"), this
              }
          }, t.fn.init.prototype = t.fn, t.dialogLockScreen = function () {
              var t = this.settings || {dialogLockScreen: !0};
              t.dialogLockScreen && (e("html,body").css("overflow", "hidden"), this.resize())
          }, t.dialogShowMask = function (t) {
              var i = this.editor, o = this.settings || {dialogShowMask: !0};
              t.css({
                  top: (e(window).height() - t.height()) / 2 + "px",
                  left: (e(window).width() - t.width()) / 2 + "px"
              }), o.dialogShowMask && i.children("." + this.classPrefix + "mask").css("z-index", parseInt(t.css("z-index")) - 1).show()
          }, t.toolbarHandlers = {
              undo: function () {
                  this.cm.undo()
              }, redo: function () {
                  this.cm.redo()
              }, bold: function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  e.replaceSelection("**" + i + "**"), "" === i && e.setCursor(t.line, t.ch + 2)
              }, del: function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  e.replaceSelection("~~" + i + "~~"), "" === i && e.setCursor(t.line, t.ch + 2)
              }, italic: function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  e.replaceSelection("*" + i + "*"), "" === i && e.setCursor(t.line, t.ch + 1)
              }, quote: function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("> " + i), e.setCursor(t.line, t.ch + 2)) : e.replaceSelection("> " + i)
              }, ucfirst: function () {
                  var e = this.cm, i = e.getSelection(), o = e.listSelections();
                  e.replaceSelection(t.firstUpperCase(i)), e.setSelections(o)
              }, ucwords: function () {
                  var e = this.cm, i = e.getSelection(), o = e.listSelections();
                  e.replaceSelection(t.wordsFirstUpperCase(i)), e.setSelections(o)
              }, uppercase: function () {
                  var e = this.cm, t = e.getSelection(), i = e.listSelections();
                  e.replaceSelection(t.toUpperCase()), e.setSelections(i)
              }, lowercase: function () {
                  var e = this.cm, t = (e.getCursor(), e.getSelection()), i = e.listSelections();
                  e.replaceSelection(t.toLowerCase()), e.setSelections(i)
              }, h1: function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("# " + i), e.setCursor(t.line, t.ch + 2)) : e.replaceSelection("# " + i)
              }, h2: function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  0 !== t.ch ? (e.setCursor(t.line, 0),
                      e.replaceSelection("## " + i), e.setCursor(t.line, t.ch + 3)) : e.replaceSelection("## " + i)
              }, h3: function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("### " + i), e.setCursor(t.line, t.ch + 4)) : e.replaceSelection("### " + i)
              }, h4: function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("#### " + i), e.setCursor(t.line, t.ch + 5)) : e.replaceSelection("#### " + i)
              }, h5: function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("##### " + i), e.setCursor(t.line, t.ch + 6)) : e.replaceSelection("##### " + i)
              }, h6: function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  0 !== t.ch ? (e.setCursor(t.line, 0), e.replaceSelection("###### " + i), e.setCursor(t.line, t.ch + 7)) : e.replaceSelection("###### " + i)
              }, "list-ul": function () {
                  var e = this.cm, t = (e.getCursor(), e.getSelection());
                  if ("" === t) e.replaceSelection("- " + t); else {
                      for (var i = t.split("\n"), o = 0, r = i.length; r > o; o++) i[o] = "" === i[o] ? "" : "- " + i[o];
                      e.replaceSelection(i.join("\n"))
                  }
              }, "list-ol": function () {
                  var e = this.cm, t = (e.getCursor(), e.getSelection());
                  if ("" === t) e.replaceSelection("1. " + t); else {
                      for (var i = t.split("\n"), o = 0, r = i.length; r > o; o++) i[o] = "" === i[o] ? "" : o + 1 + ". " + i[o];
                      e.replaceSelection(i.join("\n"))
                  }
              }, hr: function () {
                  {
                      var e = this.cm, t = e.getCursor();
                      e.getSelection()
                  }
                  e.replaceSelection((0 !== t.ch ? "\n\n" : "\n") + "------------\n\n")
              }, tex: function () {
                  if (!this.settings.tex) return alert("settings.tex === false"), this;
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  e.replaceSelection("$$" + i + "$$"), "" === i && e.setCursor(t.line, t.ch + 2)
              }, link: function () {
                  this.executePlugin("linkDialog", "link-dialog/link-dialog")
              }, "reference-link": function () {
                  this.executePlugin("referenceLinkDialog", "reference-link-dialog/reference-link-dialog")
              }, pagebreak: function () {
                  if (!this.settings.pageBreak) return alert("settings.pageBreak === false"), this;
                  {
                      var e = this.cm;
                      e.getSelection()
                  }
                  e.replaceSelection("\r\n[========]\r\n")
              }, image: function () {
                  this.executePlugin("imageDialog", "image-dialog/image-dialog")
              }, code: function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  e.replaceSelection("`" + i + "`"), "" === i && e.setCursor(t.line, t.ch + 1)
              }, "code-block": function () {
                  this.executePlugin("codeBlockDialog", "code-block-dialog/code-block-dialog")
              }, "preformatted-text": function () {
                  this.executePlugin("preformattedTextDialog", "preformatted-text-dialog/preformatted-text-dialog")
              }, table: function () {
                  this.executePlugin("tableDialog", "table-dialog/table-dialog")
              }, datetime: function () {
                  var e = this.cm, i = (e.getSelection(), new Date, this.settings.lang.name),
                      o = t.dateFormat() + " " + t.dateFormat("zh-cn" === i || "zh-tw" === i ? "cn-week-day" : "week-day");
                  e.replaceSelection(o)
              }, emoji: function () {
                  this.executePlugin("emojiDialog", "emoji-dialog/emoji-dialog")
              }, "html-entities": function () {
                  this.executePlugin("htmlEntitiesDialog", "html-entities-dialog/html-entities-dialog")
              }, "goto-line": function () {
                  this.executePlugin("gotoLineDialog", "goto-line-dialog/goto-line-dialog")
              }, watch: function () {
                  this[this.settings.watch ? "unwatch" : "watch"]()
              }, preview: function () {
                  this.previewing()
              }, fullscreen: function () {
                  this.fullscreen()
              }, clear: function () {
                  this.clear()
              }, search: function () {
                  this.search()
              }, help: function () {
                  this.executePlugin("helpDialog", "help-dialog/help-dialog")
              }, info: function () {
                  this.showInfoDialog()
              }
          }, t.keyMaps = {
              "Ctrl-1": "h1",
              "Ctrl-2": "h2",
              "Ctrl-3": "h3",
              "Ctrl-4": "h4",
              "Ctrl-5": "h5",
              "Ctrl-6": "h6",
              "Ctrl-B": "bold",
              "Ctrl-D": "datetime",
              "Ctrl-E": function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  return this.settings.emoji ? (e.replaceSelection(":" + i + ":"), void("" === i && e.setCursor(t.line, t.ch + 1))) : void alert("Error: settings.emoji == false")
              },
              "Ctrl-Alt-G": "goto-line",
              "Ctrl-H": "hr",
              "Ctrl-I": "italic",
              "Ctrl-K": "code",
              "Ctrl-L": function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection(), o = "" === i ? "" : ' "' + i + '"';
                  e.replaceSelection("[" + i + "](" + o + ")"), "" === i && e.setCursor(t.line, t.ch + 1)
              },
              "Ctrl-U": "list-ul",
              "Shift-Ctrl-A": function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  return this.settings.atLink ? (e.replaceSelection("@" + i), void("" === i && e.setCursor(t.line, t.ch + 1))) : void alert("Error: settings.atLink == false")
              },
              "Shift-Ctrl-C": "code",
              "Shift-Ctrl-Q": "quote",
              "Shift-Ctrl-S": "del",
              "Shift-Ctrl-K": "tex",
              "Shift-Alt-C": function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection();
                  e.replaceSelection(["```", i, "```"].join("\n")), "" === i && e.setCursor(t.line, t.ch + 3)
              },
              "Shift-Ctrl-Alt-C": "code-block",
              "Shift-Ctrl-H": "html-entities",
              "Shift-Alt-H": "help",
              "Shift-Ctrl-E": "emoji",
              "Shift-Ctrl-U": "uppercase",
              "Shift-Alt-U": "ucwords",
              "Shift-Ctrl-Alt-U": "ucfirst",
              "Shift-Alt-L": "lowercase",
              "Shift-Ctrl-I": function () {
                  var e = this.cm, t = e.getCursor(), i = e.getSelection(), o = "" === i ? "" : ' "' + i + '"';
                  e.replaceSelection("![" + i + "](" + o + ")"), "" === i && e.setCursor(t.line, t.ch + 4)
              },
              "Shift-Ctrl-Alt-I": "image",
              "Shift-Ctrl-L": "link",
              "Shift-Ctrl-O": "list-ol",
              "Shift-Ctrl-P": "preformatted-text",
              "Shift-Ctrl-T": "table",
              "Shift-Alt-P": "pagebreak",
              F9: "watch",
              F10: "preview",
              F11: "fullscreen"
          };
          var r = function (e) {
              return String.prototype.trim ? e.trim() : e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "")
          };
          t.trim = r;
          var n = function (e) {
              return e.toLowerCase().replace(/\b(\w)|\s(\w)/g, function (e) {
                  return e.toUpperCase()
              })
          };
          t.ucwords = t.wordsFirstUpperCase = n;
          var a = function (e) {
              return e.toLowerCase().replace(/\b(\w)/, function (e) {
                  return e.toUpperCase()
              })
          };
          return t.firstUpperCase = t.ucfirst = a, t.urls = {atLinkBase: "https://github.com/"}, t.regexs = {
              atLink: /@(\w+)/g,
              email: /(\w+)@(\w+)\.(\w+)\.?(\w+)?/g,
              emailLink: /(mailto:)?([\w\.\_]+)@(\w+)\.(\w+)\.?(\w+)?/g,
              emoji: /:([\w\+-]+):/g,
              emojiDatetime: /(\d{2}:\d{2}:\d{2})/g,
              twemoji: /:(tw-([\w]+)-?(\w+)?):/g,
              fontAwesome: /:(fa-([\w]+)(-(\w+)){0,}):/g,
              editormdLogo: /:(editormd-logo-?(\w+)?):/g,
              pageBreak: /^\[[=]{8,}\]$/
          }, t.emoji = {
              path: "http://www.emoji-cheat-sheet.com/graphics/emojis/",
              ext: ".png"
          }, t.twemoji = {path: "http://twemoji.maxcdn.com/36x36/", ext: ".png"}, t.markedRenderer = function (i, o) {
              var n = {
                  toc: !0,
                  tocm: !1,
                  tocStartLevel: 1,
                  pageBreak: !0,
                  atLink: !0,
                  emailLink: !0,
                  taskList: !1,
                  emoji: !1,
                  tex: !1,
                  flowChart: !1,
                  sequenceDiagram: !1
              }, a = e.extend(n, o || {}), s = t.$marked, l = new s.Renderer;
              i = i || [];
              var c = t.regexs, h = c.atLink, d = c.emoji, u = c.email, f = c.emailLink, g = c.twemoji, p = c.fontAwesome,
                  m = c.editormdLogo, w = c.pageBreak;
              return l.emoji = function (e) {
                  e = e.replace(t.regexs.emojiDatetime, function (e) {
                      return e.replace(/:/g, "&#58;")
                  });
                  var i = e.match(d);
                  if (!i || !a.emoji) return e;
                  for (var o = 0, r = i.length; r > o; o++) ":+1:" === i[o] && (i[o] = ":\\+1:"), e = e.replace(new RegExp(i[o]), function (e, i) {
                      var o = e.match(p), r = e.replace(/:/g, "");
                      if (o) for (var n = 0, a = o.length; a > n; n++) {
                          var s = o[n].replace(/:/g, "");
                          return '<i class="fa ' + s + ' fa-emoji" title="' + s.replace("fa-", "") + '"></i>'
                      } else {
                          var l = e.match(m), c = e.match(g);
                          if (l) for (var h = 0, d = l.length; d > h; h++) {
                              var u = l[h].replace(/:/g, "");
                              return '<i class="' + u + '" title="Editor.md logo (' + u + ')"></i>'
                          } else {
                              if (!c) {
                                  var f = "+1" === r ? "plus1" : r;
                                  return f = "black_large_square" === f ? "black_square" : f, f = "moon" === f ? "waxing_gibbous_moon" : f, '<img src="' + t.emoji.path + f + t.emoji.ext + '" class="emoji" title="&#58;' + r + '&#58;" alt="&#58;' + r + '&#58;" />'
                              }
                              for (var w = 0, v = c.length; v > w; w++) {
                                  var k = c[w].replace(/:/g, "").replace("tw-", "");
                                  return '<img src="' + t.twemoji.path + k + t.twemoji.ext + '" title="twemoji-' + k + '" alt="twemoji-' + k + '" class="emoji twemoji" />'
                              }
                          }
                      }
                  });
                  return e
              }, l.atLink = function (i) {
                  return h.test(i) ? (a.atLink && (i = i.replace(u, function (e, t, i, o) {
                      return e.replace(/@/g, "_#_&#64;_#_")
                  }), i = i.replace(h, function (e, i) {
                      return '<a href="' + t.urls.atLinkBase + i + '" title="&#64;' + i + '" class="at-link">' + e + "</a>"
                  }).replace(/_#_&#64;_#_/g, "@")), a.emailLink && (i = i.replace(f, function (t, i, o, r, n) {
                      return !i && e.inArray(n, "jpg|jpeg|png|gif|webp|ico|icon|pdf".split("|")) < 0 ? '<a href="mailto:' + t + '">' + t + "</a>" : t
                  })), i) : i
              }, l.link = function (e, t, i) {
                  if (this.options.sanitize) {
                      try {
                          var o = decodeURIComponent(unescape(e)).replace(/[^\w:]/g, "").toLowerCase()
                      } catch (r) {
                          return ""
                      }
                      if (0 === o.indexOf("javascript:")) return ""
                  }
                  var n = '<a href="' + e + '"';
                  return h.test(t) || h.test(i) ? (t && (n += ' title="' + t.replace(/@/g, "&#64;")), n + '">' + i.replace(/@/g, "&#64;") + "</a>") : (t && (n += ' title="' + t + '"'), n += ">" + i + "</a>")
              }, l.heading = function (e, t, o) {
                  var n = e, a = /\s*\<a\s*href\=\"(.*)\"\s*([^\>]*)\>(.*)\<\/a\>\s*/;
                  if (a.test(e)) {
                      var s = [];
                      e = e.split(/\<a\s*([^\>]+)\>([^\>]*)\<\/a\>/);
                      for (var l = 0, c = e.length; c > l; l++) s.push(e[l].replace(/\s*href\=\"(.*)\"\s*/g, ""));
                      e = s.join(" ")
                  }
                  e = r(e);
                  var h = e.toLowerCase().replace(/[^\w]+/g, "-"), d = {text: e, level: t, slug: h},
                      u = /^[\u4e00-\u9fa5]+$/.test(e),
                      f = u ? escape(e).replace(/\%/g, "") : e.toLowerCase().replace(/[^\w]+/g, "-");
                  i.push(d);
                  var g = "<h" + t + ' id="h' + t + "-" + this.options.headerPrefix + f + '">';
                  return g += '<a name="' + e + '" class="reference-link"></a>', g += '<span class="header-link octicon octicon-link"></span>', g += this.atLink(a ? this.emoji(n) : this.emoji(e)), g += "</h" + t + ">"
              }, l.pageBreak = function (e) {
                  return w.test(e) && a.pageBreak && (e = '<hr style="page-break-after:always;" class="page-break editormd-page-break" />'), e
              }, l.paragraph = function (e) {
                  var i = /\$\$(.*)\$\$/g.test(e), o = /^\$\$(.*)\$\$$/.test(e),
                      r = o ? ' class="' + t.classNames.tex + '"' : "",
                      n = a.tocm ? /^(\[TOC\]|\[TOCM\])$/.test(e) : /^\[TOC\]$/.test(e), s = /^\[TOCM\]$/.test(e);
                  e = !o && i ? e.replace(/(\$\$([^\$]*)\$\$)+/g, function (e, i) {
                      return '<span class="' + t.classNames.tex + '">' + i.replace(/\$/g, "") + "</span>"
                  }) : o ? e.replace(/\$/g, "") : e;
                  var l = '<div class="markdown-toc editormd-markdown-toc">' + e + "</div>";
                  return n ? s ? '<div class="editormd-toc-menu">' + l + "</div><br/>" : l : w.test(e) ? this.pageBreak(e) : "<p" + r + ">" + this.atLink(this.emoji(e)) + "</p>\n"
              }, l.code = function (e, i, o) {
                  return "seq" === i || "sequence" === i ? '<div class="sequence-diagram">' + e + "</div>" : "flow" === i ? '<div class="flowchart">' + e + "</div>" : "math" === i || "latex" === i || "katex" === i ? '<p class="' + t.classNames.tex + '">' + e + "</p>" : s.Renderer.prototype.code.apply(this, arguments)
              }, l.tablecell = function (e, t) {
                  var i = t.header ? "th" : "td",
                      o = t.align ? "<" + i + ' style="text-align:' + t.align + '">' : "<" + i + ">";
                  return o + this.atLink(this.emoji(e)) + "</" + i + ">\n"
              }, l.listitem = function (e) {
                  return a.taskList && /^\s*\[[x\s]\]\s*/.test(e) ? (e = e.replace(/^\s*\[\s\]\s*/, '<input type="checkbox" class="task-list-item-checkbox" /> ').replace(/^\s*\[x\]\s*/, '<input type="checkbox" class="task-list-item-checkbox" checked disabled /> '), '<li style="list-style: none;">' + this.atLink(this.emoji(e)) + "</li>") : "<li>" + this.atLink(this.emoji(e)) + "</li>"
              }, l
          }, t.markdownToCRenderer = function (e, t, i, o) {
              var r = "", n = 0, a = this.classPrefix;
              o = o || 1;
              for (var s = 0, l = e.length; l > s; s++) {
                  var c = e[s].text, h = e[s].level;
                  o > h || (r += h > n ? "" : n > h ? new Array(n - h + 2).join("</ul></li>") : "</ul></li>", r += '<li><a class="toc-level-' + h + '" href="#' + c + '" level="' + h + '">' + c + "</a><ul>", n = h)
              }
              var d = t.find(".markdown-toc");
              if (d.length < 1 && "false" === t.attr("previewContainer")) {
                  var u = '<div class="markdown-toc ' + a + 'markdown-toc"></div>';
                  u = i ? '<div class="' + a + 'toc-menu">' + u + "</div>" : u, t.html(u), d = t.find(".markdown-toc")
              }
              return i && d.wrap('<div class="' + a + 'toc-menu"></div><br/>'), d.html('<ul class="markdown-toc-list"></ul>').children(".markdown-toc-list").html(r.replace(/\r?\n?\<ul\>\<\/ul\>/g, "")), d
          }, t.tocDropdownMenu = function (t, i) {
              i = i || "Table of Contents";
              var o = 400, r = t.find("." + this.classPrefix + "toc-menu");
              return r.each(function () {
                  var t = e(this), r = t.children(".markdown-toc"), n = '<i class="fa fa-angle-down"></i>',
                      a = '<a href="javascript:;" class="toc-menu-btn">' + n + i + "</a>", s = r.children("ul"),
                      l = s.find("li");
                  r.append(a), l.first().before("<li><h1>" + i + " " + n + "</h1></li>"), t.mouseover(function () {
                      s.show(), l.each(function () {
                          var t = e(this), i = t.children("ul");
                          if ("" === i.html() && i.remove(), i.length > 0 && "" !== i.html()) {
                              var r = t.children("a").first();
                              r.children(".fa").length < 1 && r.append(e(n).css({"float": "right", paddingTop: "4px"}))
                          }
                          t.mouseover(function () {
                              i.css("z-index", o).show(), o += 1
                          }).mouseleave(function () {
                              i.hide()
                          })
                      })
                  }).mouseleave(function () {
                      s.hide()
                  })
              }), r
          }, t.filterHTMLTags = function (t, i) {
              if ("string" != typeof t && (t = new String(t)), "string" != typeof i) return t;
              for (var o = i.split("|"), r = o[0].split(","), n = o[1], a = 0, s = r.length; s > a; a++) {
                  var l = r[a];
                  t = t.replace(new RegExp("<s*" + l + "s*([^>]*)>([^>]*)<s*/" + l + "s*>", "igm"), "")
              }
              if ("undefined" != typeof n) {
                  var c = /\<(\w+)\s*([^\>]*)\>([^\>]*)\<\/(\w+)\>/gi;
                  t = "*" === n ? t.replace(c, function (e, t, i, o, r) {
                      return "<" + t + ">" + o + "</" + r + ">"
                  }) : "on*" === n ? t.replace(c, function (t, i, o, r, n) {
                      var a = e("<" + i + ">" + r + "</" + n + ">"), s = e(t)[0].attributes, l = {};
                      e.each(s, function (e, t) {
                          '"' !== t.nodeName && (l[t.nodeName] = t.nodeValue)
                      }), e.each(l, function (e) {
                          0 === e.indexOf("on") && delete l[e]
                      }), a.attr(l);
                      var c = "undefined" != typeof a[1] ? e(a[1]).text() : "";
                      return a[0].outerHTML + c
                  }) : t.replace(c, function (t, i, o, r) {
                      var a = n.split(","), s = e(t);
                      return s.html(r), e.each(a, function (e) {
                          s.attr(a[e], null)
                      }), s[0].outerHTML
                  })
              }
              return t
          }, t.markdownToHTML = function (i, o) {
              var r = {
                  gfm: !0,
                  toc: !0,
                  tocm: !1,
                  tocStartLevel: 1,
                  tocTitle: "目录",
                  tocDropdown: !1,
                  tocContainer: "",
                  markdown: "",
                  markdownSourceCode: !1,
                  htmlDecode: !1,
                  autoLoadKaTeX: !0,
                  pageBreak: !0,
                  atLink: !0,
                  emailLink: !0,
                  tex: !1,
                  taskList: !1,
                  emoji: !1,
                  flowChart: !1,
                  sequenceDiagram: !1,
                  previewCodeHighlight: !0
              };
              t.$marked = marked;
              var n = e("#" + i), a = n.settings = e.extend(!0, r, o || {}), s = n.find("textarea");
              s.length < 1 && (n.append("<textarea></textarea>"), s = n.find("textarea"));
              var l = "" === a.markdown ? s.val() : a.markdown, c = [], h = {
                  toc: a.toc,
                  tocm: a.tocm,
                  tocStartLevel: a.tocStartLevel,
                  taskList: a.taskList,
                  emoji: a.emoji,
                  tex: a.tex,
                  pageBreak: a.pageBreak,
                  atLink: a.atLink,
                  emailLink: a.emailLink,
                  flowChart: a.flowChart,
                  sequenceDiagram: a.sequenceDiagram,
                  previewCodeHighlight: a.previewCodeHighlight
              }, d = {
                  renderer: t.markedRenderer(c, h),
                  gfm: a.gfm,
                  tables: !0,
                  breaks: !0,
                  pedantic: !1,
                  sanitize: a.htmlDecode ? !1 : !0,
                  smartLists: !0,
                  smartypants: !0
              };
              l = new String(l);
              var u = marked(l, d);
              u = t.filterHTMLTags(u, a.htmlDecode), a.markdownSourceCode ? s.text(l) : s.remove(), n.addClass("markdown-body " + this.classPrefix + "html-preview").append(u);
              var f = "" !== a.tocContainer ? e(a.tocContainer) : n;
              if ("" !== a.tocContainer && f.attr("previewContainer", !1), a.toc && (n.tocContainer = this.markdownToCRenderer(c, f, a.tocDropdown, a.tocStartLevel), (a.tocDropdown || n.find("." + this.classPrefix + "toc-menu").length > 0) && this.tocDropdownMenu(n, a.tocTitle), "" !== a.tocContainer && n.find(".editormd-toc-menu, .editormd-markdown-toc").remove()), a.previewCodeHighlight && (n.find("pre").addClass("prettyprint linenums"), prettyPrint()), t.isIE8 || (a.flowChart && n.find(".flowchart").flowChart(), a.sequenceDiagram && n.find(".sequence-diagram").sequenceDiagram({theme: "simple"})), a.tex) {
                  var g = function () {
                      n.find("." + t.classNames.tex).each(function () {
                          var t = e(this);
                          katex.render(t.html().replace(/&lt;/g, "<").replace(/&gt;/g, ">"), t[0]), t.find(".katex").css("font-size", "1.6em")
                      })
                  };
                  !a.autoLoadKaTeX || t.$katex || t.kaTeXLoaded ? g() : this.loadKaTeX(function () {
                      t.$katex = katex, t.kaTeXLoaded = !0, g()
                  })
              }
              return n.getMarkdown = function () {
                  return s.val()
              }, n
          }, t.themes = ["default", "dark"], t.previewThemes = ["default", "dark"], t.editorThemes = ["default", "3024-day", "3024-night", "ambiance", "ambiance-mobile", "base16-dark", "base16-light", "blackboard", "cobalt", "eclipse", "elegant", "erlang-dark", "lesser-dark", "mbo", "mdn-like", "midnight", "monokai", "neat", "neo", "night", "paraiso-dark", "paraiso-light", "pastel-on-dark", "rubyblue", "solarized", "the-matrix", "tomorrow-night-eighties", "twilight", "vibrant-ink", "xq-dark", "xq-light"], t.loadPlugins = {}, t.loadFiles = {
              js: [],
              css: [],
              plugin: []
          }, t.loadPlugin = function (e, i, o) {
              i = i || function () {
              }, this.loadScript(e, function () {
                  t.loadFiles.plugin.push(e), i()
              }, o)
          }, t.loadCSS = function (e, i, o) {
              o = o || "head", i = i || function () {
              };
              var r = document.createElement("link");
              r.type = "text/css", r.rel = "stylesheet", r.onload = r.onreadystatechange = function () {
                  t.loadFiles.css.push(e), i()
              }, r.href = e + ".css", "head" === o ? document.getElementsByTagName("head")[0].appendChild(r) : document.body.appendChild(r)
          }, t.isIE = "Microsoft Internet Explorer" == navigator.appName, t.isIE8 = t.isIE && "8." == navigator.appVersion.match(/8./i), t.loadScript = function (e, i, o) {
              o = o || "head", i = i || function () {
              };
              var r = null;
              r = document.createElement("script"), r.id = e.replace(/[\./]+/g, "-"), r.type = "text/javascript", r.src = e + ".js", t.isIE8 ? r.onreadystatechange = function () {
                  r.readyState && ("loaded" === r.readyState || "complete" === r.readyState) && (r.onreadystatechange = null, t.loadFiles.js.push(e), i())
              } : r.onload = function () {
                  t.loadFiles.js.push(e), i()
              }, "head" === o ? document.getElementsByTagName("head")[0].appendChild(r) : document.body.appendChild(r)
          }, t.katexURL = {
              css: "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min",
              js: "//cdnjs.cloudflare.com/ajax/libs/KaTeX/0.3.0/katex.min"
          }, t.kaTeXLoaded = !1, t.loadKaTeX = function (e) {
              t.loadCSS(t.katexURL.css, function () {
                  t.loadScript(t.katexURL.js, e || function () {
                  })
              })
          }, t.lockScreen = function (t) {
              e("html,body").css("overflow", t ? "hidden" : "")
          }, t.createDialog = function (i) {
              var o = {
                  name: "",
                  width: 420,
                  height: 240,
                  title: "",
                  drag: !0,
                  closed: !0,
                  content: "",
                  mask: !0,
                  maskStyle: {backgroundColor: "#fff", opacity: .1},
                  lockScreen: !0,
                  footer: !0,
                  buttons: !1
              };
              i = e.extend(!0, o, i);
              var r = this, n = this.editor, a = t.classPrefix, s = (new Date).getTime(),
                  l = "" === i.name ? a + "dialog-" + s : i.name, c = t.mouseOrTouch,
                  h = '<div class="' + a + "dialog " + l + '">';
              "" !== i.title && (h += '<div class="' + a + 'dialog-header"' + (i.drag ? ' style="cursor: move;"' : "") + ">", h += '<strong class="' + a + 'dialog-title">' + i.title + "</strong>", h += "</div>"), i.closed && (h += '<a href="javascript:;" class="fa fa-close ' + a + 'dialog-close"></a>'), h += '<div class="' + a + 'dialog-container">' + i.content, (i.footer || "string" == typeof i.footer) && (h += '<div class="' + a + 'dialog-footer">' + ("boolean" == typeof i.footer ? "" : i.footer) + "</div>"), h += "</div>", h += '<div class="' + a + "dialog-mask " + a + 'dialog-mask-bg"></div>', h += '<div class="' + a + "dialog-mask " + a + 'dialog-mask-con"></div>', h += "</div>", n.append(h);
              var d = n.find("." + l);
              d.lockScreen = function (t) {
                  return i.lockScreen && (e("html,body").css("overflow", t ? "hidden" : ""), r.resize()), d
              }, d.showMask = function () {
                  return i.mask && n.find("." + a + "mask").css(i.maskStyle).css("z-index", t.dialogZindex - 1).show(), d
              }, d.hideMask = function () {
                  return i.mask && n.find("." + a + "mask").hide(), d
              }, d.loading = function (e) {
                  var t = d.find("." + a + "dialog-mask");
                  return t[e ? "show" : "hide"](), d
              }, d.lockScreen(!0).showMask(), d.show().css({
                  zIndex: t.dialogZindex,
                  border: t.isIE8 ? "1px solid #ddd" : "",
                  width: "number" == typeof i.width ? i.width + "px" : i.width,
                  height: "number" == typeof i.height ? i.height + "px" : i.height
              });
              var u = function () {
                  d.css({
                      top: (e(window).height() - d.height()) / 2 + "px",
                      left: (e(window).width() - d.width()) / 2 + "px"
                  })
              };
              if (u(), e(window).resize(u), d.children("." + a + "dialog-close").bind(c("click", "touchend"), function () {
                  d.hide().lockScreen(!1).hideMask()
              }), "object" == typeof i.buttons) {
                  var f = d.footer = d.find("." + a + "dialog-footer");
                  for (var g in i.buttons) {
                      var p = i.buttons[g], m = a + g + "-btn";
                      f.append('<button class="' + a + "btn " + m + '">' + p[0] + "</button>"), p[1] = e.proxy(p[1], d), f.children("." + m).bind(c("click", "touchend"), p[1])
                  }
              }
              if ("" !== i.title && i.drag) {
                  var w, v, k = d.children("." + a + "dialog-header");
                  i.mask || k.bind(c("click", "touchend"), function () {
                      t.dialogZindex += 2, d.css("z-index", t.dialogZindex)
                  }), k.mousedown(function (e) {
                      e = e || window.event, w = e.clientX - parseInt(d[0].style.left), v = e.clientY - parseInt(d[0].style.top), document.onmousemove = y
                  });
                  var b = function (e) {
                      e.removeClass(a + "user-unselect").off("selectstart")
                  }, x = function (e) {
                      e.addClass(a + "user-unselect").on("selectstart", function (e) {
                          return !1
                      })
                  }, y = function (t) {
                      t = t || window.event;
                      var i, o, r = parseInt(d[0].style.left), n = parseInt(d[0].style.top);
                      r >= 0 ? r + d.width() <= e(window).width() ? i = t.clientX - w : (i = e(window).width() - d.width(), document.onmousemove = null) : (i = 0, document.onmousemove = null), n >= 0 ? o = t.clientY - v : (o = 0, document.onmousemove = null), document.onselectstart = function () {
                          return !1
                      }, x(e("body")), x(d), d[0].style.left = i + "px", d[0].style.top = o + "px"
                  };
                  document.onmouseup = function () {
                      b(e("body")), b(d), document.onselectstart = null, document.onmousemove = null
                  }, k.touchDraggable = function () {
                      var t = null, i = function (i) {
                          var o = i.originalEvent, r = e(this).parent().position();
                          t = {x: o.changedTouches[0].pageX - r.left, y: o.changedTouches[0].pageY - r.top}
                      }, o = function (i) {
                          i.preventDefault();
                          var o = i.originalEvent;
                          e(this).parent().css({
                              top: o.changedTouches[0].pageY - t.y,
                              left: o.changedTouches[0].pageX - t.x
                          })
                      };
                      this.bind("touchstart", i).bind("touchmove", o)
                  }, k.touchDraggable()
              }
              return t.dialogZindex += 2, d
          }, t.mouseOrTouch = function (e, t) {
              e = e || "click", t = t || "touchend";
              var i = e;
              try {
                  document.createEvent("TouchEvent"), i = t
              } catch (o) {
              }
              return i
          }, t.dateFormat = function (e) {
              e = e || "";
              var t = function (e) {
                      return 10 > e ? "0" + e : e
                  }, i = new Date, o = i.getFullYear(), r = o.toString().slice(2, 4), n = t(i.getMonth() + 1),
                  a = t(i.getDate()), s = i.getDay(), l = t(i.getHours()), c = t(i.getMinutes()), h = t(i.getSeconds()),
                  d = t(i.getMilliseconds()), u = "", f = r + "-" + n + "-" + a, g = o + "-" + n + "-" + a,
                  p = l + ":" + c + ":" + h;
              switch (e) {
                  case"UNIX Time":
                      u = i.getTime();
                      break;
                  case"UTC":
                      u = i.toUTCString();
                      break;
                  case"yy":
                      u = r;
                      break;
                  case"year":
                  case"yyyy":
                      u = o;
                      break;
                  case"month":
                  case"mm":
                      u = n;
                      break;
                  case"cn-week-day":
                  case"cn-wd":
                      var m = ["日", "一", "二", "三", "四", "五", "六"];
                      u = "星期" + m[s];
                      break;
                  case"week-day":
                  case"wd":
                      var w = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
                      u = w[s];
                      break;
                  case"day":
                  case"dd":
                      u = a;
                      break;
                  case"hour":
                  case"hh":
                      u = l;
                      break;
                  case"min":
                  case"ii":
                      u = c;
                      break;
                  case"second":
                  case"ss":
                      u = h;
                      break;
                  case"ms":
                      u = d;
                      break;
                  case"yy-mm-dd":
                      u = f;
                      break;
                  case"yyyy-mm-dd":
                      u = g;
                      break;
                  case"yyyy-mm-dd h:i:s ms":
                  case"full + ms":
                      u = g + " " + p + " " + d;
                      break;
                  case"full":
                  case"yyyy-mm-dd h:i:s":
                  default:
                      u = g + " " + p
              }
              return u
          }, t
      }
  });